亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

服務器端C# Websocket,如何在監聽取消令牌時運行循環?

服務器端C# Websocket,如何在監聽取消令牌時運行循環?

C#
躍然一笑 2023-09-24 16:22:25
在我的 Vue/.NET Core 2.3 項目中,我開始用 Websockets 替換標準 AJAX 調用,其中我正在實現一個股票定價流服務,以便在股票價格實時更新時更新前端。之前的價格更新用于每 5 秒從 FE 發送一個間隔請求,以從方法獲取新價格StockProcess().GetStockPricing(symbol)下面的新 Websocket 實現現在使用相同的后端 GetStockPricing() 代碼,但是檢查循環現在位于后端,因此當客戶端連接時,該方法將繼續發送回價格。作為一個原則,實現工作得很好,如果價格發生變化,該方法會將更新發送給客戶端,完美。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循環:問題是行WebSocketReceiveResult result = await webSocket.ReceiveAsync(requestBuffer, CancellationToken.None);不會被執行,因為循環總是在運行,如果我將此行移到循環之前執行,那么循環也不會被觸發,所以我無法同時運行循環和 ReceiveAsync 監聽取消令牌。有辦法實現這一點嗎?在監聽取消令牌的同時運行循環?
查看完整描述

1 回答

?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

嘗試使用 System.Threading.Tasks.Task Run中的循環來監聽它


Task.Run(() => CancellationTokenFunc(...), ...);


static void CancellationTokenFunc(){

  while(true){

             //check for cancel

    }


}

在 webSocket.State 循環之前執行此操作


查看完整回答
反對 回復 2023-09-24
  • 1 回答
  • 0 關注
  • 163 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號