我在寫一個服務器,它使用一個System.Net.WebSockets.WebSocket接收客戶端數據。NETCore.App WebSockets CancellationToken
var data = await webSocket.ReceiveAsync(requestBuffer, httpContext.RequestAborted);
服務器應該能夠取消ReceiveAsync任務如果客戶端斷開連接而不關閉連接(例如,如果客戶端崩潰)。 因此,我使用了Microsoft.AspNetCore.Http.HttpContext的的RequestAborted CancellationToken。但它不適用於它。
我不確定是否必須實施具有超時的CancellationToken。在客戶端,我可以實現在超時間隔內發送的「KeepAlive」消息。有人會告訴我一個帶有超時的CancellationToken實現嗎?
[更新]
證明,我可以用這個的CancellationToken:
CancellationTokenSource source = new CancellationTokenSource(10000);
var request = await session.Socket.ReceiveAsync(requestBuffer, source.Token);
我認爲它會後10000毫秒取消任務並繼續執行。相反,它會在120000毫秒後拋出OperationCanceledException。我可以忍受那個......但我仍然想知道時差。我保持這個問題的開放,希望有人能夠說出這件事。
的'Token'將被自動設置爲取消10秒後這是罰款。 但是,實際的中止是通過執行'ReceiveAsync'來完成的,由於它在120秒後中止,所以明顯不能很好地取消。 你不能做太多的事情。 – Dusan