簡體   English   中英

使用異步void方法運行長期操作

[英]Using async void method to run long-living operation

使用async void方法來啟動一些長期有效的操作是否合適? 我知道NitoTask.Run()可用於從非異步方法運行Task 有什么區別? 有陷阱嗎?

我的意思是,我可以這樣寫嗎:

async void bar()
{
    try
    {
        //...
    }
    catch (Exception ex)
    {
        // no rethrowing here
    }
}

void foo()
{
    bar();
    // will continue right after 1st await in bar()
    baz();
}

無論如何,最好使用async Task來獲得更好的錯誤處理行為。 您無需等待結果任務。

在您的代碼段中,注釋will continue right after 1st await in bar注釋will continue right after 1st await in bar但不一定正確。 就目前而言, bar將同步執行並阻止foo因為bar中沒有等待。

開始長時間運行的操作需要使用異步IO或以某種方式使用新的線程/任務( Task.Run是適當的)。

暫無
暫無

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

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