我一直在試圖找出兩者之間的區別。
Task.Run(() => DoSomething());
和
Task.Run(async() => await DoSomething());
我一直在對此進行測驗,看起來它不會影響功能。如果你想運行一項任務,我真的很困惑使用哪一個。我正在呼叫等待任務,這只是一種語法糖,還是它們之間有區別。我應該使用哪一個,為什么?我真的很好奇,因為即使我將該任務存盤在一個變數中,它仍然會為這兩種情況回傳一個任務。
我們也有異步方法
private async Task DoSomething()
{
//do something here
}
我在這里找到了一篇很棒的帖子await Task.Run vs await 解釋了在 GUI 應用程式的事件處理程式中等待異步方法的具體情況,但這僅解釋了這之間的區別
await Task.Run(async () => await LongProcessAsync());
還有這個
await LongProcessAsync();
uj5u.com熱心網友回復:
Lambda 運算式在底層創建私有方法。所以這:
Task.Run(() => DoSomething());
變成這樣:
Task.Run(__lambda);
private Task __lambda() => DoSomething();
因此,詢問這兩行之間的區別是什么:
Task.Run(() => DoSomething());
Task.Run(async() => await DoSomething());
和問這兩種方法有什么區別是一樣的:
private Task __lambda() => DoSomething();
private async Task __lambda() => await DoSomething();
我有一篇詳細介紹的博文。總結的答案是,如果您所做的只是呼叫,DoSomething那么您可以省略(洗掉)asyncandawait關鍵字。如果為簡單起見,lambda 正在執行從您的問題中洗掉的其他任何操作(例如,修改引數),那么我建議保留asyncandawait關鍵字。
作為一般準則:任何瑣碎的代碼都可以省略async/ await;任何邏輯都應該使用asyncand await。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/411870.html
標籤:
