依赖图.并行处理

本文关键字:并行处理 依赖图 | 更新日期: 2023-09-27 18:05:22

我需要使用TPL从依赖关系图中实现依赖关系(所有进程必须并行启动)。下面是我的代码:

TaskFactory factory = Task.Factory;
// 1 and 6
Task task_1 = factory.StartNew(() => A());
Task task_6 = factory.StartNew(() => F());
// 4 and 6
Task task_2 = task_1.ContinueWith((t) => B());
Task task_4 = task_6.ContinueWith((t) => D());
// 5 and 7
Task task_5 = task_2.ContinueWith((t) => E());
Task task_7 = task_4.ContinueWith((t) => G());
// 3
Task task_3 = factory.ContinueWhenAll(new[] { task_1, task_2, task_4, task_5, task_6, task_7 }, (tasks) => C());
Task.WaitAll(task_3);

我所有的方法看起来像:

private static void A()
{
    Console.WriteLine("1");
}

有更优雅的解决方案吗?

依赖图.并行处理

由于大多数图由简单的路径组成,您可以将代码简化为(假设依赖图是固定的):

Task task125 = factory.StartNew(() => { A(); B(); E(); });
Task task647 = factory.StartNew(() => { F(); D(); G(); });
Task.WaitAll(task125, task647);
C();