<PackageReference Include="Polly" Version="8.0.0-alpha.5" />

AsyncTimeoutEngine

static class AsyncTimeoutEngine
using System; using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; namespace Polly.Timeout { internal static class AsyncTimeoutEngine { [AsyncStateMachine(typeof(<ImplementationAsync>d__0<>))] internal static Task<TResult> ImplementationAsync<TResult>(Func<Context, CancellationToken, Task<TResult>> action, Context context, CancellationToken cancellationToken, Func<Context, TimeSpan> timeoutProvider, TimeoutStrategy timeoutStrategy, Func<Context, TimeSpan, Task, Exception, Task> onTimeoutAsync, bool continueOnCapturedContext) { <ImplementationAsync>d__0<TResult> stateMachine = default(<ImplementationAsync>d__0<TResult>); stateMachine.<>t__builder = AsyncTaskMethodBuilder<TResult>.Create(); stateMachine.action = action; stateMachine.context = context; stateMachine.cancellationToken = cancellationToken; stateMachine.timeoutProvider = timeoutProvider; stateMachine.timeoutStrategy = timeoutStrategy; stateMachine.onTimeoutAsync = onTimeoutAsync; stateMachine.continueOnCapturedContext = continueOnCapturedContext; stateMachine.<>1__state = -1; stateMachine.<>t__builder.Start(ref stateMachine); return stateMachine.<>t__builder.Task; } private static Task<TResult> AsTask<TResult>(this CancellationToken cancellationToken) { TaskCompletionSource<TResult> tcs = (TaskCompletionSource<TResult>)new TaskCompletionSource<TResult>(); IDisposable registration = null; registration = cancellationToken.Register(delegate { ((TaskCompletionSource<TResult>)tcs).TrySetCanceled(); registration?.Dispose(); }, false); return ((TaskCompletionSource<TResult>)tcs).Task; } } }