簡體   English   中英

從異步方法調用非異步方法,同時保持高可用性

[英]Invoking non-async methods from async methods while maintaining high availability

我正在使用async控制器ASP.NET Core web 應用程序。 我在ASP.NET Core項目中引用和調用方法,該項目不使用執行 IO 綁定工作的異步編程(無async )。

理想的解決方案是重構引用的項目以使用異步編程。 但是,我面臨着嚴重的時間限制。

Microsoft 文檔建議不要使用Task.Run創建任務來執行 IO 綁定工作。 它還建議不要立即等待Task.Run的結果。

我的問題是 - 在這種情況下是否還有其他選擇,我可以在不重構和不創建線程的情況下調用非異步方法,同時保持高可用性?

在這種情況下是否還有其他選擇,我可以在不重構和不創建線程的情況下調用非異步方法,同時保持高可用性?

您的選擇是:

  1. 直接給他們打電話。 由於方法是同步的,您將阻塞 I/O 工作上的線程。
  2. 使方法異步。

最簡單的方法是將非同步方法放在Task.Run命令中:

async Task<IActionResult> MyControllerMethod(CancellationToken cancellationToken) {

    var str = await Task.Run(() => 
    { 
        return MyReturnMethod(); 
    
    }, cancellationToken);
    
    await Task.Run (() => MyVoidMethod(), cancellationToken);
}


public string MyReturnMethod() {...}

public void MyVoidMethod() {...}

請注意,取消令牌是可選的,但強烈推薦。 此外,您不需要將變量傳遞到 API 端點。 如果它來自 web 請求,它將自動生成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM