Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将任务添加到ForLoop中的任务列表_C#_Asynchronous_Task - Fatal编程技术网

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

C# 将任务添加到ForLoop中的任务列表,c#,asynchronous,task,C#,Asynchronous,Task,我需要向多个服务器发送请求,并尝试使用任务异步运行每个连接。我有一个配置为建立连接的功能: internal static Task<EventRecordEx> GetEventRecordFromServer(string server, string activityID) 内部静态任务GetEventRecordFromServer(字符串服务器,字符串活动ID) 我尝试了以下操作,但它是同步运行的 var taskList = new List<Task<

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

 internal static Task<EventRecordEx> GetEventRecordFromServer(string server, string activityID)
内部静态任务GetEventRecordFromServer(字符串服务器,字符串活动ID)
我尝试了以下操作,但它是同步运行的

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
    }
});
var taskList=新列表();
foreach(服务器列表中的字符串服务器)
{
添加(GetEventRecordFromServer(server,id));
}
等待Task.Factory.continuewhell(taskList.ToArray(),completedTasks=>
{
foreach(completedTasks中的var任务)
{  
//对结果做点什么
}
});

我做错了什么?

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

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

    await task.ConfigureAwait(false);

    // Do something.
}

服务器调用正在异步运行。您正在等待
async
完成所有调用,然后才能继续。此代码很好。您应该使用
wait Task.WhenAll(taskList)
而不是
Task.Facture.ContinueWhenAll
@JohanP-似乎日志显示所有服务器调用的线程相同。。。我从函数中删除了任务,并使用了taskList.Add(Task.Factory.StartNew(()=>GetEventRecordFromServer(server,id));每个调用似乎都在不同的线程下运行。。。