using System.Threading.Tasks;
public static async Task Main()
var myStuff = new string[] {"A:1", "A:2", "A:3", "B:1", "B:2", "C:1", "C:2", "C:3", "C:4"};
var groups = myStuff.GroupBy(s => s.Split(':')[0]);
groups.Select(async d => {
await Task.WhenAll(data[..^1].Select(async item => await SomeMethodAsync(item)));
await SomeMethodAsync(data[^1]);
static Random r = new Random();
public static async Task SomeMethodAsync(string s)
var delay = r.Next(3000);