在正在接受负载并将连接设置为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之后在客户端和服务器上添加断点时,客户端会收到连接为“ OPEN”且可以使用的准备,并开始发送数据。
问题在于当时尚未启动ReceiveAsync,原因是ReceiveAsync开始运行任务的速度稍慢,由于服务器问题,它们在WaitingForActivation中的停留时间比在空闲系统上的停留时间更长处于高负载(很多其他任务/线程和低CPU数量)。
这是正常行为吗?如何停止?
答案 0 :(得分:0)
有人检查了我的代码,那个人发现稍后调用ReceiveAsync并不是问题,信息在缓冲区中。
更高的是事件处理程序的附加时间太晚了。