在For循环中将任务添加到任务列表

问题描述 投票:0回答:1

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

 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
    }
});

我究竟做错了什么?

c# asynchronous task
1个回答
0
投票

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

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

    await task.ConfigureAwait(false);

    // Do something.
}
© www.soinside.com 2019 - 2024. All rights reserved.