using System.Collections.Generic;
using System.Threading.Tasks;
public static async Task Main()
var tasks = new List<Task<string>>{
Task.Run( async () => { await Task.Delay(TimeSpan.FromSeconds(1.3)); return "Task1"; }),
Task.Run( async () => { await Task.Delay(TimeSpan.FromSeconds(2.3)); return "Task2"; }),
Task.Run( async () => { await Task.Delay(TimeSpan.FromSeconds(4.0)); return "Task3"; }),
Task.Run( async () => { await Task.Delay(TimeSpan.FromSeconds(1.5)); throw new InvalidOperationException("Oooopsie"); return "Task4";}),
Task.Run( async () => { await Task.Delay(TimeSpan.FromSeconds(3.1)); return "Task5"; })
await foreach( var task in WhenEach(tasks) )
Console.WriteLine(await task);
Console.WriteLine(e.Message);
Console.WriteLine("DONE");
public static async IAsyncEnumerable<Task<T>> WhenEach<T>(IEnumerable<Task<T>> tasks)
var taskList = new List<Task<T>>(tasks);
var task = await Task.WhenAny(taskList);