using System.Collections.Generic;
using System.Threading.Tasks;
public static async Task Main()
Console.WriteLine("Hello World");
Task<int> task1 = Task.Run(() => DoSomeCPUWork());
Task<string> task2 = Task.Run(() => DoSomeIOOperation());
await Task.WhenAll(task1, task2);
int result1 = task1.Result;
string result2 = task2.Result;
Console.WriteLine("Mixed operation running... " + $"Results: {result1}, {result2}");
Task<double> task3 = Task.Run(() => DoMixedOperation(result1, result2));
static int DoSomeCPUWork()
Console.WriteLine("CPU-bound operation running...");
Console.WriteLine("CPU-bound operation completed.");
static string DoSomeIOOperation()
Console.WriteLine("IO-bound operation running...");
Console.WriteLine("IO-bound operation completed.");
static double DoMixedOperation(int res1, string res2)
Console.WriteLine("Mixed operation running 2... " + $"Results: {res1}, {res2}");
Console.WriteLine("Mixed operation completed.");