<PackageReference Include="Polly" Version="8.4.0" />

AsyncTimeoutPolicy

A timeout policy which can be applied to async delegates.
using System; using System.Diagnostics; using System.Threading; using System.Threading.Tasks; namespace Polly.Timeout { public class AsyncTimeoutPolicy : AsyncPolicy, ITimeoutPolicy, IsPolicy { private readonly Func<Context, TimeSpan> _timeoutProvider; private readonly TimeoutStrategy _timeoutStrategy; private readonly Func<Context, TimeSpan, Task, Exception, Task> _onTimeoutAsync; internal AsyncTimeoutPolicy(Func<Context, TimeSpan> timeoutProvider, TimeoutStrategy timeoutStrategy, Func<Context, TimeSpan, Task, Exception, Task> onTimeoutAsync) : base((PolicyBuilder)null) { if (timeoutProvider == null) throw new ArgumentNullException("timeoutProvider"); _timeoutProvider = timeoutProvider; _timeoutStrategy = timeoutStrategy; if (onTimeoutAsync == null) throw new ArgumentNullException("onTimeoutAsync"); _onTimeoutAsync = onTimeoutAsync; } [DebuggerStepThrough] protected override Task<TResult> ImplementationAsync<TResult>(Func<Context, CancellationToken, Task<TResult>> action, Context context, CancellationToken cancellationToken, bool continueOnCapturedContext) { return AsyncTimeoutEngine.ImplementationAsync(action, context, cancellationToken, _timeoutProvider, _timeoutStrategy, _onTimeoutAsync, continueOnCapturedContext); } } }