Страницы

Поиск по вопросам

четверг, 1 ноября 2018 г.

Применение Task.WhenAll

Подскажите пожалуйста, в чем особенность использования Task.WhenAll ?
Полазив в msdn понял, что он создает новую задачу, по завершении указанных задач в параметре, однако, по сути он ничего не создает, кроме некой ссылки типа Task, с которой я не могу понять что делать дальше. Если здесь создается просто ссылка, которой я должен присвоить в дальнейшем новый объект типа Task, то тогда проще вызвать (имхо)
Task.WaitAll(t, t1); Task t2 = new Task(...);
или может быть я в неправильном направлении думаю. Подскажите пожалуйста пример использования этого метода. Спасибо.


Ответ

Сначала я неправильно прочитал вопрос и ответил про WaitAll
Допустим есть несколько экземплров Task, каждый из которых выполняет действие и возвращает результат. Затем, все эти результаты надо как-то обработать. WhenAll создаёт таск, который заканчивается, когда заканчиваются все таски в него переданные. При этом результатом этого таска будет массив результатов тасков аргументов.
Также можно проанализировать состояние переданных тасков, их исключения и так далее.
static void Main(string[] args) { var t1 = new Task(DoSomething1); var t2 = new Task(DoSomething2);
t1.Start(); t2.Start();
var t3 = Task.WhenAll(t1,t2);
Console.WriteLine(t3.Result.Sum()); }
private static int DoSomething2() { return 3; }
private static int DoSomething1() { return 5; }

Комментариев нет:

Отправить комментарий