var builder = WebApplication.CreateBuilder(args); builder.Services.AddSingleton(); var app = builder.Build(); app.MapGet("/wait", async (CancellationToken token, CancelProbe probe) => { try { await Task.Delay(TimeSpan.FromSeconds(30), token); return TypedResults.Ok(new { completed = true }); } catch (OperationCanceledException) when (token.IsCancellationRequested) { probe.Record(); throw; } }); app.MapGet("/probe", (CancelProbe probe) => new { canceled = probe.Count }); app.Run(); public sealed class CancelProbe { private int count; public int Count => Volatile.Read(ref count); public void Record() => Interlocked.Increment(ref count); }