代码之家  ›  专栏  ›  技术社区  ›  Dscoduc

在ForLoop中将任务添加到Tasklist

  •  0
  • Dscoduc  · 技术社区  · 6 年前

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

     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 回复  |  直到 6 年前
        1
  •  0
  •   Mac    6 年前

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

    foreach(Task task in taskList.ToArray()){
    
        await task.ConfigureAwait(false);
    
        // Do something.
    }