Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
Alternative to dotnet#20494
  • Loading branch information
roji committed Feb 22, 2021
1 parent 838e95e commit 5a6251a
Showing 1 changed file with 78 additions and 0 deletions.
78 changes: 78 additions & 0 deletions src/EFCore/Storage/ExecutionStrategy.cs
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,84 @@ public virtual TResult Execute<TState, TResult>(
return ExecuteImplementation(operation, verifySucceeded, state);
}

private TResult Foo<TState, TResult>(
Func<DbContext, TState, TResult> operation,
Func<DbContext, TState, ExecutionResult<TResult>> verifySucceeded,
TState state)
{
while (true)
{
try
{
Suspended = true;
var result = operation(Dependencies.CurrentContext.Context, state);
Suspended = false;
return result;
}
catch (Exception ex)
{
Suspended = false;
if (verifySucceeded != null
&& CallOnWrappedException(ex, ShouldVerifySuccessOn))
{
while (true)
{
try
{
Suspended = true;
var verifySucceededResult = verifySucceeded(Dependencies.CurrentContext.Context, state);
Suspended = false;
if (verifySucceededResult.IsSuccessful)
{
return verifySucceededResult.Result;
}
}
catch (Exception ex2)
{
Suspended = false;

if (!CallOnWrappedException(ex2, ShouldRetryOn))
{
throw;
}

PrepareRetry(ex2);
continue;
}

break;
}
}

if (!CallOnWrappedException(ex, ShouldRetryOn))
{
throw;
}

PrepareRetry(ex);
}
}

void PrepareRetry(Exception ex)
{
ExceptionsEncountered.Add(ex);

var delay = GetNextDelay(ex);
if (delay == null)
{
throw new RetryLimitExceededException(
CoreStrings.RetryLimitExceeded(MaxRetryCount, GetType().Name), ex);
}

Dependencies.Logger.ExecutionStrategyRetrying(ExceptionsEncountered, delay.Value, async: true);

OnRetry();

using var waitEvent = new ManualResetEventSlim(false);
waitEvent.WaitHandle.WaitOne(delay.Value);
}
}

private TResult ExecuteImplementation<TState, TResult>(
Func<DbContext, TState, TResult> operation,
Func<DbContext, TState, ExecutionResult<TResult>> verifySucceeded,
Expand Down

0 comments on commit 5a6251a

Please sign in to comment.