2015-05-12 2 views
1

Я хочу параллельно выполнять методы без, начиная новую цепочку или новую задачу для каждого метода. Я использую Winforms и таргетинг .Net 4.5Как начать методы параллельно с Parallel.Invoke?

Вот что я хочу сделать. У меня есть список названных учетных записей, метод называется 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

Выглядит хорошо, в чем проблема? – Zer0

+3

'Parallel.ForEach (accounts, processAccount);' –

+0

Обратите внимание, что вы должны включать любые ошибки компиляции или времени выполнения, с которыми вы сталкиваетесь в своем вопросе. – juharr

ответ

4

Проблема заключается в том, что вам нужно, чтобы создать действие. Самый простой способ сделать это - лямбда.

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

Обратите внимание, что вы должны захватить i переменные внутри цикла в переменной index так, что все действия не до конца, используя то же значение, что бы в конечном итоге accounts.Count после отделки петель в for.

+0

Работал на 100%, просто изменил фигурные скобки вокруг индекса на квадратные. Это именно та проблема, с которой я столкнулся. Я тестировал консольное приложение, просто печатал цифры от 1 до 10 и вместо 1, 4, 3, 2, 5 и т. Д. Я получал 10, 10, 10, 10 .... –