StrategyHelper
using System;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
namespace Polly.Utils
{
internal static class StrategyHelper
{
[System.Runtime.CompilerServices.NullableContext(1)]
[return: System.Runtime.CompilerServices.Nullable(new byte[] {
0,
0,
1
})]
public static ValueTask<Outcome<TResult>> ExecuteCallbackSafeAsync<[System.Runtime.CompilerServices.Nullable(2)] TResult, [System.Runtime.CompilerServices.Nullable(2)] TState>([System.Runtime.CompilerServices.Nullable(new byte[] {
1,
1,
1,
0,
0,
1
})] Func<ResilienceContext, TState, ValueTask<Outcome<TResult>>> callback, ResilienceContext context, TState state)
{
if (!context.CancellationToken.IsCancellationRequested)
try {
ValueTask<Outcome<TResult>> task = callback(context, state);
if (!task.IsCompleted)
return <ExecuteCallbackSafeAsync>g__AwaitTask|0_0<TResult, TState, TResult>(task, context.ContinueOnCapturedContext);
return new ValueTask<Outcome<TResult>>(task.GetResult());
} catch (Exception exception) {
return new ValueTask<Outcome<TResult>>(Outcome.FromException<TResult>(exception));
}
return new ValueTask<Outcome<TResult>>(Outcome.FromException<TResult>(new OperationCanceledException(context.CancellationToken)));
}
}
}