ждите несколько задач и получить доступ к результатам - PullRequest
1 голос
/ 20 мая 2019

Мне нужно запустить несколько ожидаемых задач, а затем собрать их результаты в список и вернуть его.

Я могу создавать задачи в цикле и использовать Task.WhenAll, чтобы ожидать их, но я не могу понять, как получить доступ к результатам каждой ожидаемой задачи. Я пробовал ниже, но результат не определен.

    List<Service> services = new List<Service>();
    List<Exception> exceptions = new List<Exception>();
    List<Task<Service>> tasks = new List<Task<Service>>();

    foreach (string serviceMoniker in monikers)
    {
      try
      {
        tasks.Add(GetService(serviceMoniker, tenantMoniker, countryCode, environmentId));
      }
      catch (Exception e) { exceptions.Add(e); }
    }

    var continuation = Task.WhenAll(tasks);

    for (int i=0; i < continuation.Result.Length - 1; i++)
    {
      services.Add(continuation.Result[i].Result);
    }

еще одна попытка

    await Task.WhenAll(tasks);

    foreach (Task t in tasks)
    {
      services.Add(t.Result);
    }

Ответы [ 2 ]

1 голос
/ 20 мая 2019

Вы итерируете (для foreach) переменную Task (которая не имеет типизированного Result), вам нужно перебрать переменную Task<Service> (или использовать var, поскольку ваш tasks список уже напечатан), то есть:

foreach (var t in tasks)
{
  services.Add(t.Result);
}
0 голосов
/ 20 мая 2019

Мне не хватало общей части Задачи в цикле.Изменил

await Task.WhenAll(tasks);

foreach (Task t in tasks)
{
  services.Add(t.Result);
}

на

await Task.WhenAll(tasks);

foreach (Task<Service> t in tasks)
{
  services.Add(t.Result);
}

и теперь он работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...