using System.Threading.Tasks;
public static async Task<string> DoSomethingAsync(int i)
public static void Main()
var random = new Random();
var tasks = Enumerable.Range(0, 100).Select(x => DoSomethingAsync(random.Next(5)));
var results = Task.WhenAll(tasks).Result;
var groups = results.GroupBy(x => x).Select(x => new
x.Key, Count = x.Count()}
foreach (var group in groups)
Console.WriteLine(group.Key + " " + group.Count);