我可以嵌套Parallel.Invoke方法吗?

时间:2018-02-19 08:47:25

标签: c# .net parallel-processing task task-parallel-library

我想知道是否可能或建议使用Parallel.Invoke方法的多个层,或者它是否可能导致问题/减缓应用程序。

这是最好的做法吗?

Parallel.Invoke(
    () => Invoke("orange"),
    () => Invoke("apples"),
    () => Invoke("pears")
);           

public static void Invoke(string name)
{
    Parallel.Invoke(
        () => test.testapp(name),
        () => test.testapp(name),
        () => test.testapp(name)
    );
}

1 个答案:

答案 0 :(得分:0)

这是可能的,但可能没有任何好处 - 这实际上取决于这些工作正在做什么。

如果它们本质上是异步任务(例如在数据库或外部API上)可以并行执行,则可能是有益的。但是,如果他们是CPU密集型任务,那么您可能只是为调度程序提供额外的工作而没有任何实际好处。

有一篇文章here,其中包含使用并行库的一些基准测试,它可能会让您知道何时使用它。

此测试的结果:

模拟调用外部资源:

into: 'admin'

CPU密集型任务:

Not Nested: 00:00:14.6155628
Nested: 00:00:09.0907248