[英]Start chain Tasks wait for result all of them in C#
What I need to start chain Tasks
and wait for results of all of them. 我需要启动链式 Tasks
并等待所有Tasks
的结果。
List<int> myAsyncWork1()
List<int> myAsyncWork2()
List<int> myAsyncWork3()
var tasks = new Func<Task>[]
{
() => myAsyncWork1(),
() => myAsyncWork2(),
() => myAsyncWork3()
};
await Task.WhenAll(tasks.Select(task => task()).ToArray()); //Async
How we can get List<int>
of all methods when the all Tasks
are completed ? 完成所有Tasks
,如何获取所有方法的List<int>
?
You can simply use the result of WhenAll
, for example: 您可以简单地使用WhenAll
的结果,例如:
Task<List<int>> work1() { ... }
Task<List<int>> work2() { ... }
Task<List<int>> work3() { ... }
async Task DoConcurrentWork()
{
List<int>[] lists = await Task.WhenAll(work1(), work2(), work3());
// use lists
}
After you sure that all tasks completed, you can use task.Result
property. 确保所有任务完成后,可以使用task.Result
属性。
var tasksFunc = new Func<Task<List<int>>>[]
{
() => myAsyncWork1(),
() => myAsyncWork2(),
() => myAsyncWork3()
};
var tasks = tasksFunc.Select(func => func());
await Task.WhenAll(tasks);
var allLists = tasks.Select(task => task.Result);
private static void Main(string[] args)
{
var tasks = new List<Task<List<int>>>(){
myAsyncWork1(),
myAsyncWork2(),
myAsyncWork3()
};
var results = Task.WhenAll(tasks).Result;
var numbers = results.SelectMany(x => x).ToList();
Console.WriteLine(string.Join(" ", numbers.Select(x => x.ToString())));
Console.ReadKey();
}
static Task<List<int>> myAsyncWork1()
{
return Task.Factory.StartNew(() =>
{
Console.WriteLine("MyAsyncWork1 started!");
Thread.Sleep(300);
Console.WriteLine("MyAsyncWork1 finished!");
return new List<int>() { 1, 2, 3 };
});
}
static Task<List<int>> myAsyncWork2()
{
return Task.Factory.StartNew(() =>
{
Console.WriteLine("MyAsyncWork2 started!");
Thread.Sleep(200);
Console.WriteLine("MyAsyncWork2 finished!");
return new List<int>() { 4, 5, 6 };
}); ;
}
static Task<List<int>> myAsyncWork3()
{
return Task.Factory.StartNew(() =>
{
Console.WriteLine("MyAsyncWork3 started!");
Thread.Sleep(200);
Console.WriteLine("MyAsyncWork3 finished!");
return new List<int>() { 7, 8, 9 };
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.