C# 是否同步执行WebSocket SendAsync()
我有一个WebsocketC# 是否同步执行WebSocket SendAsync(),c#,multithreading,asynchronous,websocket,C#,Multithreading,Asynchronous,Websocket,我有一个WebsocketHTTPListener作为服务器,客户端是的 我将所有当前客户机都保存在一个列表中,我希望有一个函数可以异步地向所有客户机发送信息 因此,我目前拥有的是: private async Task SendToAll(byte[] buffer) { foreach (WebSocket webSocket in clients) { await Send(webSocket, buffer, buffer.Length); } }
HTTPListener
作为服务器,客户端是的
我将所有当前客户机都保存在一个列表中,我希望有一个函数可以异步地向所有客户机发送信息
因此,我目前拥有的是:
private async Task SendToAll(byte[] buffer)
{
foreach (WebSocket webSocket in clients)
{
await Send(webSocket, buffer, buffer.Length);
}
}
private async Task Send(WebSocket webSocket, byte[] buffer, int bufferLength)
{
try
{
await webSocket.SendAsync(
new ArraySegment<byte>(buffer, 0, bufferLength),
WebSocketMessageType.Text, true,
CancellationToken.None);
}
catch (WebSocketException ex)
{
RemoveClient(webSocket, WebSocketCloseStatus.InternalServerError, ex.Message);
}
}
private async Task SendToAll(字节[]缓冲区)
{
foreach(客户端中的WebSocket WebSocket)
{
等待发送(webSocket、buffer、buffer.Length);
}
}
专用异步任务发送(WebSocket WebSocket,字节[]缓冲区,int bufferLength)
{
尝试
{
等待webSocket.SendAsync(
新的ArraySegment(buffer,0,bufferLength),
WebSocketMessageType.Text,true,
取消令牌(无);
}
捕获(WebSocketException例外)
{
RemoveClient(webSocket、WebSocketCloseStatus.InternalServerError、ex.Message);
}
}
问题是,如果一个服务器有大量的客户端,我打开的线程数量就相当多,这对我来说是一种浪费。所以我认为Send()
函数可以同步发生,但是WebSocket
s没有同步函数,这对我来说很奇怪
我认为同步运行任务函数不是一个好的实践,有没有好的方法?我不想只放下等待
问题是,如果一个服务器有大量的客户端,我打开的线程数量就相当多,这对我来说是一种浪费
两个问题:
private async Task SendToAll(byte[] buffer)
{
var tasks = clients.Select(webSocket => Send(webSocket, buffer, buffer.Length));
await Task.WhenAll(tasks);
}
经过测试,我的问题肯定是过度优化,这是不必要的。有时候再次听到它是件好事。非常感谢。