async Task Foo()
{
var cts = new CancellationTokenSource();
var t = Task.Delay(TimeSpan.FromSeconds(10), cts.Token);
cts.CancelAfter(TimeSpan.FromSeconds(1));
cts.CancelAfter(TimeSpan.FromSeconds(5));
var sw = new Stopwatch();
try
{
sw.Start();
await t;
}
catch (TaskCanceledException)
{
sw.Stop();
Console.WriteLine(sw.Elapsed);
}
}