.net websocket.ReceiveAsync 设置超时任务不起作用 CancellationTokenSource
最近在研究 .net 的.net websocket
服务器端设置一个超时,如果服务端在120内没有接受到客户端的任何信息,将跳出循环,终止监听,关闭socket
我做测试,客户端直接关闭进程,服务器端没有检测到断开,应该在120秒内结束任务,但不知道为什么一直不执行,
CancellationTokenSource 不起作用,我的环境是 vs2017 系统 server2012
哪位大神做过这一块,帮小弟指点一下
循环监听
while (socket.State == WebSocketState.Open)
{
CancellationTokenSource source = new CancellationTokenSource(120 * 1000); //120秒超时
ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[2048]);
WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, source.Token);
if (source.IsCancellationRequested)
{
WriteLog("WebSocket监听超时120秒");
await socket.CloseAsync(WebSocketCloseStatus.NormalClosure,
String.Empty, CancellationToken.None);
source.Dispose();
break; //获取的消息是关闭,跳出循环
}
source.Dispose();
if (result.MessageType == WebSocketMessageType.Close)
{
WriteLog("WebSocket接收到关闭消息");
await socket.CloseAsync(WebSocketCloseStatus.NormalClosure,
String.Empty, CancellationToken.None);
break; //获取的消息是关闭,跳出循环
}
#region 消息处理(字符截取、消息转发)
。。。。。
。。。。。
#endregion
}