2016-07-19 6 views
0

У меня есть два метода ниже. Не могли бы вы рассказать мне, что каждый метод делает вкратце и как эти два метода отличаются друг от друга?Задача внутри и снаружи цикла

public void Method1() 
{ 
     foreach (string symbol in arrList) 
     { 
      Task.Factory.StartNew(() => DoWork(symbol)); 

     } 
} 

public void Method2() 
{ 

     Task.Factory.StartNew(() => 
     { 
      foreach (string symbol in arrList) 
      { 
       DoWork(symbol); 

      } 
     }); 
} 
+2

У вас уже есть ответ - «Задача внутри и снаружи цикла». Не могли бы вы пояснить, что вы не понимаете? Особенно после чтения документации по «StartNew»? –

+0

Будет ли метод2 создавать отдельную задачу для каждого цикла или нет? – user3447602

+0

@ user3447602 Сколько раз DoWork() вызывается в Method2 (внутри цикла) и сколько раз, когда вы только что сделали один вызов? Если вы ответите, что у вас есть ответ на ваш вопрос. –

ответ

3

Первый будет создавать множество асинхронных задач, каждый из которых вызывает DoWork с заданным символом. Вторая создаст одну асинхронную задачу, которая будет выполнять весь цикл перед выходом.

+0

Спасибо. Можно ли узнать, завершены ли все задачи первого метода? – user3447602

+1

@ user3447602 Конечно, соберите их в списке и передайте их в 'Task.WhenAll'. – juharr

Смежные вопросы