[英]C# Will code execution continue after await?
在閱讀了大量有關 await/async 的資料后,我對這個主題仍然存在一些誤解。 請對我的問題提供一個簡短的回答(是/否)和一個長的回答,以便我更好地理解。
假設我們有以下方法:
public async Task UnresultTaskMethod()
{
await AsyncMethod1();
await AsyncMethod2();
}
問題:
Task.WaitAll(tasks); Task.WhenAll(tasks);
Task.WaitAll(tasks); Task.WhenAll(tasks);
最后,我可以確保在所有任務結束之前不會繼續執行,這是我感到困惑的主要因素,如果可以通過關鍵字 await 等待它們,為什么還要以這種方式等待任務?await 大致意思是“等到完成”
不
不
如果你不等待,它可能是這種情況,例如
public async Task UnresultTaskMethod()
{
Task.Delay(2000);
// We haven't awaited, so we're here right away
await AsyncMethod2();
}
Task.WaitAll
和Task.WhenAll
沒有意義。 但是,您可以這樣做:public async Task UnresultTaskMethod()
{
var task1 = AsyncMethod1();
var task2 = AsyncMethod2();
// The tasks are now doing their job
await Task.WhenAll(task1, task2);
// Here you are sure both task1 and task2 are completed
}
使用Task.WaitAll
它將是這樣的:
public async Task UnresultTaskMethod()
{
var task1 = AsyncMethod1();
var task2 = AsyncMethod2();
// This is not awaitable, you're blocking the current thread
Task.WaitAll(task1, task2);
// Here you are sure both task1 and task2 are completed
}
在這種情況下,您不需要async Task
,因為您沒有等待,即它實際上是一個void
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.