Добавление задачи в список задач в ForLoop - PullRequest
0 голосов
/ 03 сентября 2018

Мне нужно отправить запрос на несколько серверов, и я пытаюсь использовать задачи для асинхронного запуска каждого соединения. У меня есть функция, настроенная для подключения:

 internal static Task<EventRecordEx> GetEventRecordFromServer(string server, string activityID)

Я пробовал следующее, но оно работает синхронно ...

var taskList = new List<Task<EventRecordEx>>();
foreach (string server in server_list)
{
    taskList.Add(GetEventRecordFromServer(server, id));
}
await Task.Factory.ContinueWhenAll(taskList.ToArray(), completedTasks =>
{
    foreach (var task in completedTasks)
    {  
        // do something with the results
    }
});

Что я делаю не так?

1 Ответ

0 голосов
/ 03 сентября 2018

В моем понимании, когда вы используете .ContinueWhenAll, вам будет сложно отладить исключения, когда одна из задач завершится неудачно, так как она возвратит AggregateException, я бы предложил выполнить задачу по отдельности, а затем использовать .ConfigureAwait ( false) чтобы убедиться, что он работает в монахинном потоке пользовательского интерфейса, например:

foreach(Task task in taskList.ToArray()){

    await task.ConfigureAwait(false);

    // Do something.
}
...