using System.Threading.Tasks;
using System.Collections.Generic;
private static async Task<int> ProcessItem(int item) => await Task.Run(() =>
var threadNum = Thread.GetCurrentProcessorId();
Console.WriteLine($"Task {item} is executed on thread #{threadNum}");
public static async Task MainAsync()
List<int> domain = new() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var tasks = domain.ToDictionary((it) => it, (it) => ProcessItem(it));
Task.WaitAll(tasks.Values.ToArray());
foreach (var i in domain)
Console.WriteLine($"2 * {i} = {await tasks[i]}");
public static void Main()
var start = DateTime.Now;
var diff = (end - start).TotalMilliseconds;
Console.WriteLine($"10 second operation took {diff}ms");