我需要并行执行多个 Task<List<string>>
并将它们合并成一个新的 List<string>
,然后获取返回值。
这是我目前的代码。从fiddle中可以看到,任务是并行执行的(执行时间约为1秒)。问题是我不知道如何获取每次执行的返回值(一个List<string>
对象),以便我可以将它们合并。
Fiddle: https://dotnetfiddle.net/91YqkY
代码:
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
var filters = new List<string>
{
"A", "B", "C"
}
;
var api = new API();
var TaskList = new List<Task>();
foreach (var f in filters)
{
var LastTask = new Task<List<String>>(() =>
{
return api.GetArray(f);
}
);
LastTask.Start();
TaskList.Add(LastTask);
}
Task.WaitAll(TaskList.ToArray());
foreach (var t in TaskList)
{
// I need to get the List<string> returned in each GetArray and merge them
}
}
}
public class API
{
public List<string> GetArray(string param)
{
Thread.Sleep(1000);
return new List<String>{
param + "1",
param + "2",
param + "3",
};
}
}
Task
并不是“并行执行”的,对吧?它们是异步执行的。此外,您可以根据完成顺序采取行动,或者基于另一个任务的完成继续执行。 - Eric Lease