[英]Use await for background threads or not?
我目前正在使用async / await關鍵字,並經歷了以下問題: 正確使用Task.Run以及何時僅使用async-await和Async / Await與線程
但是,即使第二個鏈接也無法回答我的問題,那就是何時使用
Task.Run(...)
與
await Task.Run(...)
是情境還是通過使用await(然后返回到調用方)可以得到什么?
代碼Task.Run(...)
(在兩個示例中)都將委托發送到線程池,並返回一個包含該委托結果的任務。 這些“結果”可以是實際的返回值,也可以是例外。 您可以使用返回的任務來檢測結果何時可用(即,委托完成的時間)。
因此,如果滿足以下任一條件 ,則應使用Task
:
如果您的調用代碼需要執行上述任何操作,請使用await
:
await Task.Run(...);
長時間運行的后台任務,有時你想要做的那些(例如,檢測例外),但你不想做的時候了 ; 在這種情況下,只需保存Task
,然后在應用程序中的其他位置await
它:
this.myBackgroundTask = Task.Run(...);
如果您不需要上述任何一項,則可以執行“射擊后遺忘”,如下所示:
var _ = Task.Run(...); // or just "Task.Run(...);"
請注意,真正的“一勞永逸”應用程序極為罕見 。 字面上的意思是“運行此代碼,但是我不在乎它是否完成,何時完成或是否成功”。
您可以在使用即發即棄類型處理邏輯時使用Task.Run() ,類似於如果有人訂閱了事件則調用事件。 您可以將其用於日志記錄,通知等。
如果依賴於方法中執行的結果或操作,則需要使用await Task.Run(),因為它會暫停當前執行直到任務完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.