我已经定义了一个数组Action<string, int, double, double>
并希望使用Parallel.Invoke()
. 有什么方法可以将我的动作转换为无参数的动作,以便我可以做到这一点,还是有其他方法?
问问题
7219 次
2 回答
7
你可以试试这个:
Parallel.Invoke(() =>
{
YourFirstAction(param1, param2, param3, param4);
}, // close first Action
() =>
{
YourSecondAction(param1, param2, param3, param4);
}//close second Action
); //close parallel.invoke
于 2012-04-26T22:10:13.693 回答
1
如果您可以在不发送参数值的情况下执行它们,我对为什么动作有参数感到困惑。最好将 Parallel.ForEach 与默认值一起使用:
Action<string, int, double, double>[] actions;
// Action array, actions, set somewhere in code.
Parallel.ForEach(actions, action => action(string.Empty, 0, 0, 0));
如果要发送参数,请替换您认为合适的值。
我在测试中使用了以下操作:
Parallel.For(0, actions.Length, index => actions[index] = (s, i, d1, d2) => Thread.Sleep(100));
Parallel.For(0, parameterless.Length, index => parameterless[index] = () => Thread.Sleep(100));
长度为 20 的数组的结果(以秒为单位):
并行调用:0.3000709
Parallel.ForEach:0.3022143
常规 for 循环:2.0000706
所以 Parallel.Invoke 确实具有使用无参数操作的优势,这对性能有轻微影响,但影响不大。
只是为了好玩,我使用 Parallel.ForEach 测试了无参数的 Action 数组,结果与 Parallel.Invoke 几乎相同,结果为 0.300979 秒。
于 2013-03-25T01:55:57.257 回答