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));每个调用似乎都在不同的线程下运行。。。