在我的 Vue/.NET Core 2.3 項目中,我開始用 Websockets 替換標準 AJAX 調(diào)用,其中我正在實現(xiàn)一個股票定價流服務,以便在股票價格實時更新時更新前端。之前的價格更新用于每 5 秒從 FE 發(fā)送一個間隔請求,以從方法獲取新價格StockProcess().GetStockPricing(symbol)下面的新 Websocket 實現(xiàn)現(xiàn)在使用相同的后端 GetStockPricing() 代碼,但是檢查循環(huán)現(xiàn)在位于后端,因此當客戶端連接時,該方法將繼續(xù)發(fā)送回價格。作為一個原則,實現(xiàn)工作得很好,如果價格發(fā)生變化,該方法會將更新發(fā)送給客戶端,完美。API控制器.cs[HttpGet("GetStockPricingAsync", Name = "GetStockPricingAsync")]public async Task GetStockPricingAsync(string symbol){ var isSocketRequest = ControllerContext.HttpContext.WebSockets.IsWebSocketRequest; if (isSocketRequest) { WebSocket webSocket = await ControllerContext.HttpContext.WebSockets.AcceptWebSocketAsync(); await _mainController.GetStockPricingAsync(ControllerContext.HttpContext, webSocket, symbol); } else { ControllerContext.HttpContext.Response.StatusCode = 400; }}問題是我無法取消正在運行的GetStockPricing循環(huán):問題是行WebSocketReceiveResult result = await webSocket.ReceiveAsync(requestBuffer, CancellationToken.None);不會被執(zhí)行,因為循環(huán)總是在運行,如果我將此行移到循環(huán)之前執(zhí)行,那么循環(huán)也不會被觸發(fā),所以我無法同時運行循環(huán)和 ReceiveAsync 監(jiān)聽取消令牌。有辦法實現(xiàn)這一點嗎?在監(jiān)聽取消令牌的同時運行循環(huán)?
1 回答
動漫人物
TA貢獻1815條經(jīng)驗 獲得超10個贊
嘗試使用 System.Threading.Tasks.Task Run中的循環(huán)來監(jiān)聽它
Task.Run(() => CancellationTokenFunc(...), ...);
static void CancellationTokenFunc(){
while(true){
//check for cancel
}
}
在 webSocket.State 循環(huán)之前執(zhí)行此操作
- 1 回答
- 0 關(guān)注
- 193 瀏覽
添加回答
舉報
0/150
提交
取消
