我有一个方法可以生成任务数组(关于线程的问题请参见我的上一篇文章),在方法结束时,我有以下选择:
await Task.WhenAll(tasks); // done in a method marked with async
Task.WhenAll(tasks).Wait(); // done in any type of method
Task.WaitAll(tasks);
基本上我想知道这两个whenall
之间的区别,因为第一个似乎不会等待任务完成,而第二个会等待,但如果它不是异步的,我不想使用第二个。
我包含了第三个选项,因为我理解这将锁定当前线程直到所有任务完成处理(看起来是同步的而不是异步的)- 如果我对此错了,请纠正我。
带有await的示例函数:
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
}
targetFramework
设置为 4.5。 - Stephen Cleary