【发布时间】:2016-11-22 19:09:08
【问题描述】:
.Net TPL 专家,
注意:不能使用DataFlow库;不允许加载项。
我有四个任务如下图所示:
task_1 (data_producer) -> 从大文件(>500000 条记录)中读取记录并将记录添加到 BlockingCollection
task_2, task_3 (data_consumers) -> 这些任务中的每一个都从 BlockingCollection 获取记录。每个任务对取自 BlockingCollection(网络相关)的记录执行一些工作,完成后,每个任务都可以将记录添加到结果队列中。处理顺序并不重要。
task_4(结果处理器)-> 从 results_queue 中获取记录并写入输出文件。
然后我等待任务完成,即:
Task.WhenAll( t1, t2, t3, t4 )
所以我有一个生产者任务、多个消费者任务和一个保存结果的任务。
我的问题是:
如何在任务 2 和 3 完成时通知任务 4,以便任务 4 也知道何时结束?
我发现了许多以线性“管道”方式将数据从一个任务“移动”到另一个任务的示例,但没有找到任何示例来说明上述情况;也就是任务2和3完成后如何通知任务4,让它也知道什么时候完成。
我最初的想法是在任务 4 中“注册”任务 2 和 3,并简单地监控每个注册任务的状态——当任务 2 和 3 不再运行时,任务 4 可以停止(如果结果队列是也是空的)。
提前致谢。
【问题讨论】:
-
您无法为您的项目添加NuGet Package for
TPL Dataflow? -
正确 -- 对于这个特定项目,不允许使用 TPL 数据流。
-
TPL 数据流现在内置在 .NET 平台 (.NET Core) 中
标签: .net task-parallel-library tpl-dataflow