using System.Collections.Generic;
using System.Threading.Tasks;
public static async void Main()
var input = new List<string> { "1", "2", "3", "4", "5"};
await BadLoopAsync(input);
public static Task DoAsync(string Item)
Console.WriteLine("Item: {0}", Item);
return Task.CompletedTask;
public static async Task BadLoopAsync(IEnumerable<string> thingsToLoop)
foreach (var thing in thingsToLoop)
public static async Task LoopAsync(IEnumerable<string> thingsToLoop)
List<Task> listOfTasks = new List<Task>();
foreach (var thing in thingsToLoop)
listOfTasks.Add(DoAsync(thing));
await Task.WhenAll(listOfTasks);