[英]Using async void method to run long-living operation
使用async void
方法來啟動一些長期有效的操作是否合適? 我知道Nito或Task.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.