Как назначить результаты задач WaitAll переменным - PullRequest
0 голосов
/ 11 июня 2018

У меня такая ситуация:

var retrievalTasks = new Task[2];

retrievalTasks[0] = GetNodesAsync();

retrievalTasks[1] = GetAssetsToHandleAsync();

Task.WaitAll(retrievalTasks);

И я хотел бы, чтобы результаты retrievalTasks[0] и retrievalTasks[1] были сохранены в переменных.

Я мог бы добиться этого с помощью:

 var a = await GetNodesAsync();
 var b = await GetAssetsToHandleAsync();;

Но я бы предпочел не ждать обоих так, потому что тогда они не будут уволены одновременно, верно?Или я неправильно понимаю?

Я видел это как ссылку: Ожидание нескольких задач с разными результатами

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

Есть идеи?

Спасибо

РЕДАКТИРОВАТЬ:

await Task.WhenAll(catTask, houseTask, carTask);

var cat = await catTask;

var house = await houseTask;

var car = await carTask;

Это просто, казалось, подождатьчетыре раза, чтобы получить три результата.Тем не менее, @armenm показал, как этого избежать.

1 Ответ

0 голосов
/ 11 июня 2018

Итак, вам нужно иметь отдельные переменные для задач, имеющих соответствующие типы:

var task1 = GetNodesAsync();
var task2 = GetAssetsToHandleAsync();

Task.WaitAll(new Task[] { task1, task2 });

var result1 = task1.Result;
var result2 = task2.Result;

Но я бы рекомендовал сделать это асинхронным:

var task1 = GetNodesAsync();
var task2 = GetAssetsToHandleAsync();

await Task.WhenAll(new Task[] { task1, task2 });

var result1 = task1.Result;
var result2 = task2.Result;
...