我有一堆彼此互斥的方法,因此可以并行运行。有没有好的方法可以做到这一点?到目前为止,我有以下两种实现,但我不太确定是否应该选择其中一种。
使用Parallel.For :
Parallel.For(0, 2, i =>
{
switch (i)
{
case 0:
SomeMethod1();
break;
case 1:
SomeMethod2();
break;
}
});
使用Parallel.Invoke :
Parallel.Invoke(
() => { SomeMethod1(); },
() => { SomeMethod2(); }
);
其中哪一个性能最佳?或者有其他更好的方法吗?
最佳答案
我认为性能不应该是这里的问题。这都是关于可读/可维护的代码。
- 第一个;我认为将开关放在
Parallel.For
中是不好的做法。这很令人困惑,而且使用大型开关时,它将无法读取/无法维护 - 第二个;更好的是,您可以将操作存储到
List<Action>
中首先。
就像 Henrik 已经说过的:Parallel.Invoke(SomeMethod1, SomeMethod2);
在这种情况下(对我来说)是最好的可读性。 (在本例中它有效,因为没有参数/返回值)
但作为对你的问题的 react ;每次调用执行 switch/case 都会产生一些额外的开销。
关于c# - Parallel.For 与 Parallel.Invoke,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37678065/