using System;
using System.Net.Sockets;
using System.Threading.Tasks;

namespace JNGame.Util
{
    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;  
        }
    }
}