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

AsyncTimeoutPolicy<TResult>

public class AsyncTimeoutPolicy<TResult> : AsyncPolicy<TResult>, ITimeoutPolicy<TResult>, ITimeoutPolicy, IsPolicy
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<TResult> : AsyncPolicy<TResult>, ITimeoutPolicy<TResult>, ITimeoutPolicy, IsPolicy { private Func<Context, TimeSpan> _timeoutProvider; private TimeoutStrategy _timeoutStrategy; private Func<Context, TimeSpan, Task, Exception, Task> _onTimeoutAsync; internal AsyncTimeoutPolicy(Func<Context, TimeSpan> timeoutProvider, TimeoutStrategy timeoutStrategy, Func<Context, TimeSpan, Task, Exception, Task> onTimeoutAsync) : base((PolicyBuilder<TResult>)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(Func<Context, CancellationToken, Task<TResult>> action, Context context, CancellationToken cancellationToken, bool continueOnCapturedContext) { return AsyncTimeoutEngine.ImplementationAsync<TResult>(action, context, cancellationToken, _timeoutProvider, _timeoutStrategy, _onTimeoutAsync, continueOnCapturedContext); } } }