dotnet / dotnet/EntityFramework.Docs

Add a sample showing how to implement a suspendable execution strategy

Open
#3,667 0 comments 0 reactions 1 assignee Claimed by @AndriySvyryd View on GitHub
area-connection-resiliency
Dominant language
Mermaid
Stars
1.7k
Forks
2k
Avg merge
7d 23h
Merged PRs (30d)
16

Description

```C#
public abstract class MyExecutionStrategy : SqlServerRetryingExecutionStrategy
{
public MyExecutionStrategy(
ExecutionStrategyDependencies dependencies)
: base(dependencies)
{
}

private static readonly AsyncLocal _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 state,
Func operation,
Func>? verifySucceeded)
=> Suspend
? operation(Dependencies.CurrentContext.Context, state)
: base.Execute(state, operation, verifySucceeded);

public override Task ExecuteAsync(
TState state,
Func> operation,
Func>>? verifySucceeded,
CancellationToken cancellationToken = default)
=> Suspend
? operation(Dependencies.CurrentContext.Context, state, cancellationToken)
: base.ExecuteAsync(state, operation, verifySucceeded, cancellationToken);
}
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.