.net 4.0 您将如何在TPL中创建循环任务图,和/或这是否可能?

.net 4.0 您将如何在TPL中创建循环任务图,和/或这是否可能?,.net-4.0,task,cycle,task-parallel-library,.net 4.0,Task,Cycle,Task Parallel Library,我的项目需要从多个来源收集数据,然后在完成数据收集后做出响应。某些收集任务依赖于以前的收集任务。TPL是一个很好的选择,因为它自然而然地会继续执行来自其前身的任务,而使用结果的“最终”任务也是依赖的。伟大的然而,我们希望有一个“睡眠和再聚集”的任务,在“最终”任务完成后开始;从逻辑上讲,此任务的任务是“最终”任务的先行任务,并启动下一个周期。实际上,TPL的DAG是循环的,或者,如果按顺序考虑,是循环的 是否有可能在TPL API中完全表达这种循环需求?如果是,怎么做?我们当前的实现在先行项上执

我的项目需要从多个来源收集数据,然后在完成数据收集后做出响应。某些收集任务依赖于以前的收集任务。TPL是一个很好的选择,因为它自然而然地会继续执行来自其前身的任务,而使用结果的“最终”任务也是依赖的。伟大的然而,我们希望有一个“睡眠和再聚集”的任务,在“最终”任务完成后开始;从逻辑上讲,此任务的任务是“最终”任务的先行任务,并启动下一个周期。实际上,TPL的DAG是循环的,或者,如果按顺序考虑,是循环的


是否有可能在TPL API中完全表达这种循环需求?如果是,怎么做?我们当前的实现在先行项上执行一个WaitAll(),然后执行一个Task.StartNew(),给定一个执行睡眠的委托,然后使用WaitAll()重新生成一个任务图。这是可行的,但似乎有点做作。

这里有几个选项。你现在所做的似乎是合理的

但是,您可以使用
BlockingCollection
将整个操作设置为生产者/消费者场景。如果您的消费枚举对象使用了
ManualResetEvent
,该事件是在
WaitAll
完成后设置的,则它可以允许使用您现在编写的任务一次消费一个“项目”

这就是说,这似乎是一个完美的候选人图书馆(在CTP)