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);
}
}
}