這兩種方法之間的實際區別(如果有的話)是什麼?異步方法 - 等待和返回任務之間的區別
public static Task DoSomething()
{
return FooAsync();
}
public static async Task DoSomethingAsync()
{
await FooAsync();
}
這兩種方法之間的實際區別(如果有的話)是什麼?異步方法 - 等待和返回任務之間的區別
public static Task DoSomething()
{
return FooAsync();
}
public static async Task DoSomethingAsync()
{
await FooAsync();
}
的實際差別使用這些方面是:什麼都沒有。兩者都是「等候」的。
生成的代碼會有一個小的差異,異步版本將變成一個狀態機。沒有什麼可擔心的。
由於這些方法別無其他,所以很難相互比較。第一個(最簡單的)會做。
等待將實際上等待任務完成並返回結果。當你返回一個任務時,它會返回一個將在將來完成的任務的句柄,因此你在等待任務來獲得結果。
使用'await'的方法無論如何返回一個任務,所以你*仍然*必須等待他們 –
'await'不等待'FooAsync()'完成,它立即返回給調用者(如果'Task'由'FooAsync()'返回的數據尚未完成)。當內部任務完成時,'DoSomethingAsync()'最終會在await後恢復......所以沒有什麼區別,因爲沒有什麼可以恢復......這只是編譯器的開銷。 –
是的,我同意它放棄控制,但它等待將使它等待結果。我並不是說等待會使它同步,使它成爲一個阻塞呼叫。 –
DoSomething()
將在調用者詢問時執行。 所以它會被執行時,你會做await DoSomething();
。但是你可以存儲在一個變量的任務,後來執行它:
var task = DoSomething();
// Do stuff
await task();
隨着DoSomethingAsync
,叫時,它就會被執行。因爲它是異步的。
是的,一個是異步的。但兩者都有'延遲執行',調用FooAsync()的時間或方式完全沒有區別。 –
[這裏是一個很好的開始...](https://msdn.microsoft.com/en-us/library/mt674882.aspx) –
將此標記爲重複的人是錯誤的。 OP不會問是否使用其中一個,而是有什麼區別,答案與鏈接問題中的答案有很大不同。 – Bauss