Open
Description
public abstract class MyExecutionStrategy : SqlServerRetryingExecutionStrategy
{
public MyExecutionStrategy(
ExecutionStrategyDependencies dependencies)
: base(dependencies)
{
}
private static readonly AsyncLocal<bool?> _suspend = new();
public static bool Suspend
{
get => _suspend.Value ?? false;
set => _suspend.Value = value;
}
public override bool RetriesOnFailure
=> !Suspend && base.RetriesOnFailure;
public override TResult Execute<TState, TResult>(
TState state,
Func<DbContext, TState, TResult> operation,
Func<DbContext, TState, ExecutionResult<TResult>>? verifySucceeded)
=> Suspend
? operation(Dependencies.CurrentContext.Context, state)
: base.Execute(state, operation, verifySucceeded);
public override Task<TResult> ExecuteAsync<TState, TResult>(
TState state,
Func<DbContext, TState, CancellationToken, Task<TResult>> operation,
Func<DbContext, TState, CancellationToken, Task<ExecutionResult<TResult>>>? verifySucceeded,
CancellationToken cancellationToken = default)
=> Suspend
? operation(Dependencies.CurrentContext.Context, state, cancellationToken)
: base.ExecuteAsync(state, operation, verifySucceeded, cancellationToken);
}