using System.Diagnostics;
using System.Threading.Tasks;
public static async Task Main()
var timeout = TimeSpan.FromMilliseconds(50);
var pessimisticTimeoutPolicy = Policy.TimeoutAsync(
TimeoutStrategy.Pessimistic,
onTimeoutAsync: (ctx, ts, task) => task.ContinueWith( t => _ = t));
var timer = Stopwatch.StartNew();
await pessimisticTimeoutPolicy.ExecuteAsync(async ct => await DoSomethingAsync(ct), CancellationToken.None);
Console.WriteLine($"Timer : {timer.ElapsedMilliseconds} ms");
catch (TimeoutRejectedException e)
Console.WriteLine($"Timer : {timer.ElapsedMilliseconds} ms");
Console.WriteLine(e.Message);
private static async Task DoSomethingAsync(CancellationToken ct)
await Task.Delay(100, ct);