Pet*_*ete 21 multithreading async-await c#-5.0
我有一个生成一系列任务的方法(参见我之前关于线程的帖子),在这个方法的最后我有以下选项:
await Task.WhenAll(tasks); // done in a method marked with async
Task.WhenAll(tasks).Wait(); // done in any type of method
Task.WaitAll(tasks);
Run Code Online (Sandbox Code Playgroud)
基本上我想知道两个whenall
s 之间的区别是什么,因为第一个似乎没有等到任务完成,而第二个完成,但我不想使用第二个,如果它不是asynchronus .
我已经包含了第三个选项,因为我知道这将锁定当前线程,直到所有任务都完成处理(看似同步而不是异步) - 请纠正我,如果我错了这个
等待的示例函数:
public async void RunSearchAsync()
{
_tasks = new List<Task>();
Task<List<SearchResult>> products = SearchProductsAsync(CoreCache.AllProducts);
Task<List<SearchResult>> brochures = SearchProductsAsync(CoreCache.AllBrochures);
_tasks.Add(products);
_tasks.Add(brochures);
await Task.WhenAll(_tasks.ToArray());
//code here hit before all _tasks completed but if I take off the async and change the above line to:
// Task.WhenAll(_tasks.ToArray()).Wait();
// code here hit after _tasks are completed
}
Run Code Online (Sandbox Code Playgroud)
T M*_*own 28
await
await将返回调用者,并在等待的任务完成时恢复方法执行.
WhenAll
将创建一个任务*当所有所有任务完成时.
WaitAll
将阻止创建线程(主线程),直到所有任务完成.
归档时间: |
|
查看次数: |
19328 次 |
最近记录: |