【发布时间】:2011-12-14 18:47:55
【问题描述】:
我在当前项目中使用 TPL 并使用 Parallel.Foreach 来旋转多个线程。 Task 类包含 Wait() 以等待任务完成。像这样,我怎样才能等待 Parallel.ForEach 完成,然后再执行下一条语句?
【问题讨论】:
我在当前项目中使用 TPL 并使用 Parallel.Foreach 来旋转多个线程。 Task 类包含 Wait() 以等待任务完成。像这样,我怎样才能等待 Parallel.ForEach 完成,然后再执行下一条语句?
【问题讨论】:
您不必做任何特别的事情,Parallel.Foreach() 将等到其所有分支任务完成。在调用线程中,您可以将其视为单个同步语句,例如将其包装在 try/catch 中。
【讨论】:
await 在 Parallel.For 循环内。这就是为什么这是一个坏主意。它不应该出现。
Parallel.Foreach 不需要这样:它只在有可用处理器数量的线程中执行 foreach,但它会同步返回。
更多信息可以找到here
【讨论】:
正如这里的每个人所说 - 你不需要等待它。我可以根据我的经验补充: 如果你有一个异步主体要执行并且你await里面有一些异步调用,它只是运行我的代码并且没有等待任何东西。所以我只是用 .Result 替换了 await - 然后它按预期工作。我不知道为什么会这样:/
【讨论】:
Result 和Parallel.ForEach,因为它们都不适合异步。您可以查看here 的替代方案。
Parallel.Foreach 中,我们最好使用await ... 而不是.Result。