如何设置WebSocket.ReceiveAsync的超时
似乎WebSocket.ReceiveAsync可能永远等待数据。有没有办法设置非活动超时?下面是代码在概念上的外观:如何设置WebSocket.ReceiveAsync的超时,websocket,Websocket,似乎WebSocket.ReceiveAsync可能永远等待数据。有没有办法设置非活动超时?下面是代码在概念上的外观: public async Task DoListening(AspNetWebSocketContext context) { WebSocketReceiveResult receiveResult = await socket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), Cancellation
public async Task DoListening(AspNetWebSocketContext context)
{
WebSocketReceiveResult receiveResult = await socket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
if (inactivity timeout ocurred)
{
DoInactivityAction();
}
else
{
DoReceiveAction();
}
}
公共异步任务数据列表(AspNetWebSocketContext)
{
WebSocketReceiveResult receiveResult=等待套接字.ReceiveAsync(新的ArraySegment(receiveBuffer),CancellationToken.None);
如果(出现不活动超时)
{
DoInactivityAction();
}
其他的
{
DoReceiveAction();
}
}
您可以使用自定义
公共异步任务数据列表(AspNetWebSocketContext)
{
var timeOut=新的CancellationTokenSource(500).Token;
WebSocket接收结果接收结果;
尝试
{
receiveResult=Wait socket.ReceiveAsync(新的ArraySegment(receiveBuffer)),超时;
DoReceiveAction();
}
捕捉(操作取消异常)
{
DoInactivityAction();
}
}
未测试的代码。啊,我在看CancellationToken,而不是CancellationTokenSource。谢谢这会引发TaskCanceledException并将套接字置于中止状态,在套接字无法再次使用之后,如果您尝试,它将引发异常。如果不创建一个全新的WebSocket,则无法重试此操作根本不起作用,如果将来的数据实际发送,则不会引发任何异常,并且套接字会中止
public async Task DoListening(AspNetWebSocketContext context)
{
var timeOut = new CancellationTokenSource(500).Token;
WebSocketReceiveResult receiveResult;
try
{
receiveResult = await socket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), timeOut );
DoReceiveAction();
}
catch(OperationCancelledException)
{
DoInactivityAction();
}
}