【发布时间】:2015-07-28 18:44:04
【问题描述】:
所以我的问题如下:我有一个要处理的项目列表,我想并行处理这些项目,然后提交已处理的项目。
C# 中的屏障类将允许我执行此操作 - 我可以并行运行线程来处理项目列表,当调用 SignalAndWait 并且所有参与者都遇到障碍时,我可以提交已处理的项目。
Task 类也允许我执行此操作 - 在 Task.WaitAll 调用中,我可以等待所有任务完成,然后我可以提交已处理的项目。如果我理解正确,每个任务都将在它自己的线程上运行,而不是在同一个线程上并行运行一堆任务。
- 我对问题的两种用法的理解是否正确?
- 两者之间有什么优势吗?
- 混合解决方案有什么更好的方法(障碍和任务?)。
【问题讨论】:
-
从来不知道
Barrier。阅读后,也许 TPL Dataflow 更符合您的喜好? -
在处理数据时,您是在做 IO 密集型工作还是 CPU 密集型工作?