- 已关闭**。此问题需要details or clarity。当前不接受答案。
- 想要改进此问题?**添加详细信息并通过editing this post阐明问题。
12小时前关门了。
Improve this question
我有一个for循环,在这个for循环中,有一个void
方法,这个方法通常需要花费时间,我想以async
的方式运行这个void
方法,并且想在doStuff(ele)
完成之后,为list
中的所有ele
调用printFinalMessage()
。
for (int ele in list)
{
doStuff(ele);
}
printFinalMessage()
会很感激你的帮助。
3条答案
按热度按时间vyswwuz21#
我建议只使用
Parallel.ForEach
循环,这将 * 并发地 * 处理元素,而不是 * 异步地 * 处理元素,这意味着循环将进行得更快,但printFinalMessage
将仅在所有元素实际完成处理时才被打印:这里假设
doStuff
是一个常规的同步方法,如果它返回一个任务,你可能应该使用Task.WhenAll
来创建一个任务,表示所有任务的完成。您可能还想在后台任务中运行整个循环,这样在循环运行时UI就不会冻结。
pdkcd3nj2#
问题的关键字是等待所有任务这是microsoft的reference,将任务添加到列表中并等待所有任务。注意
DoStuff()
的签名是Task
aamkag613#
@JonasH说了什么,但如果你让
doStuff
异步¹,那么你可以使用Parallel.ForEachAsync
²:¹ -真实的的异步;不是假装异步,例如-
Task.FromResult
² -可从.NET 6获得