将任务添加到ForLoop中的任务列表

时间:2018-09-02 23:21:44

标签: c# asynchronous task

我需要向多个服务器发送请求,并尝试使用任务异步运行每个连接。我有一个配置为进行连接的功能:

 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 :(得分:0)

据我了解,当您使用.ContinueWhenAll时,如果其中一个任务失败,您将很难调试异常,因为它将返回AggregateException,我建议单独运行该任务,然后使用.ConfigureAwait( false)以确保其在修女UI线程中运行,如下所示:

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

    await task.ConfigureAwait(false);

    // Do something.
}