What I need to start chain Tasks
and wait for results of all of them.
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 ?
You can simply use the result of WhenAll
, for example:
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.
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 };
});
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.