如何与Parallel.Invoke并行启动方法?

时间:2015-05-12 18:49:06

标签: c# winforms

我想并行执行的方法,而不是为每个方法启动新线程或新任务。我使用Winforms并定位.Net 4.5

这就是我想要做的。我有一个名为accounts的列表,名为processAccount的方法,我想为列表中的每个帐户启动processAccount。我想并行执行这些方法,经过一些阅读后看起来Parallel.Invoke可能是我需要的:

List<string> accounts = new List<string>();

private static void processAccount(string acc)
{
  //do a lot of things
}

Action[] actionsArray = new Action[accounts.Count];

//how do I do the code below
for (int i = 0; i < accounts.Count; i++)
{
 actionsArray[i] = processAccount(accounts[i]); //  ?????
}

//this is the line that should start the methods in parallel 
Parallel.Invoke(actionsArray);

1 个答案:

答案 0 :(得分:4)

问题是你需要创建一个Action。最简单的方法是使用lambda。

for (int i = 0; i < accounts.Count; i++)
{
    int index = i;
    actionsArray[i] = () => processAccount(accounts(index)); 
}

请注意,您必须在i变量中捕获循环内的index变量,以便所有操作最终都不会使用相同的值,最终会成为{{1}在accounts.Count循环结束后。