我想并行执行的方法,而不是为每个方法启动新线程或新任务。我使用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);
答案 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
循环结束后。