.NET Fiddle

CSharp · Console

/Program.cs

using System;
using System.Threading;
using System.Threading.Tasks;

public class Program
{
    public static async Task Main()
    {
        Print("Before Task.Run");
        Task task = Task.Run(() => DoWorkAsync());
        Print("After Task.Run");
        Thread.Sleep(1000);
        Print("Before Task.WhenAll");
        Task whenAllTask = Task.WhenAll(task);
        Thread.Sleep(1000);
        Print("Before await whenAllTask");
        await whenAllTask;
        Print("After await whenAllTask");

        static async Task DoWorkAsync()
        {
            Print("--Starting work");
            await Task.Delay(3000);
            Print("--Finishing work");
        }

        static void Print(object value)
        {
            Console.WriteLine($@"{DateTime.Now:HH:mm:ss.fff} [{Thread.CurrentThread
                .ManagedThreadId}] > {value}");
        }
    }
}
;