.NET Fiddle

CSharp · Console

/Program.cs

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

public static class Program
{
    public static async Task Main()
    {
        var cts = new CancellationTokenSource();
        Print("1");
        var task = Task.Run(async () =>
        {
            Print("2");
            try { await Task.Delay(Timeout.Infinite, cts.Token); }
            catch (OperationCanceledException) { }
            Print("4");
            Thread.Sleep(1000);
            Print("5");
        });
        Thread.Sleep(1000);
        Print("3");
        cts.Cancel();
        Print("6");
        await task;

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