33 lines
1017 B
C#
Raw Normal View History

2024-10-17 01:59:25 +08:00
using System;
2024-08-17 14:27:18 +08:00
using System.Net.Sockets;
using System.Threading.Tasks;
2024-10-17 01:59:25 +08:00
namespace JNGame.Runtime.Util
2024-08-17 14:27:18 +08:00
{
public class NetTool
{
public static async Task SendAsync(Socket socket, byte[] buffer)
{
// 注意这里我们实际上并没有直接使用async/await因为BeginSend是回调模式
// 但我们可以使用TaskCompletionSource来桥接回调和async/await
var tcs = new TaskCompletionSource<int>();
// 异步发送数据
socket.BeginSend(buffer, 0, buffer.Length, SocketFlags.None, (ar) =>
{
try
{
int bytesSent = socket.EndSend(ar);
tcs.SetResult(bytesSent);
}
catch (Exception ex)
{
tcs.SetException(ex);
}
}, null);
// 等待发送完成
await tcs.Task;
}
}
}