在读取服务器以从套接字读取之前,我在负载下接受连接并将其设置为 OPEN 的设置遇到问题。
示例(不是实际代码):
while (true) {
var objContext = HttpListenerContext.GetContext();
if (objContext.Request.IsWebSocketRequest){
var WebSocket = (await HttpListenerContext.AcceptWebSocketAsync(null)).WebSocket;
while (WebSocket.State == WebSocketState.Open) {
var buffer = new byte[BUFFERSIZE];
var result = await WebSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken);
....
}
}
}
在调用 AcceptWebSocketAsync 后,我注意到在客户端和服务器上添加断点时,客户端会收到连接已“打开”并准备好使用并开始发送数据的信息。
问题是此时 ReceiveAsync 尚未启动,原因是 ReceiveAsync 开始运行任务的速度有点慢,由于相关服务器处于高位,它们在 WaitingForActivation 中停留的时间比在空闲系统上的时间长一点负载(许多其他任务/线程和少量cpu)。
这是正常行为吗?如何制止?