gpt4 book ai didi

multithreading - await Task.WhenAll() 与 Task.WhenAll().Wait()

转载 作者:行者123 更新时间:2023-12-03 11:54:35 28 4
gpt4 key购买 nike

我有一个方法可以生成一系列任务( See my previous post about threading ),在这个方法结束时,我有以下选项:

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 s 是因为第一个似乎不会等到任务完成,而第二个则是,但如果不是异步的,我不想使用第二个。

我已经包含了第三个选项,因为我知道这将锁定当前线程,直到所有任务完成处理(似乎是同步而不是异步) - 如果我对这个有误,请纠正我

带有等待的示例函数:
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
}

最佳答案

await将返回给调用者,并在等待的任务完成时恢复方法执行。
WhenAll将创建一个任务**当所有*所有任务都完成时。
WaitAll将阻塞创建线程(主线程),直到所有任务完成。

关于multithreading - await Task.WhenAll() 与 Task.WhenAll().Wait(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22966578/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com