Ich verwende Polly-Framework für transiente Fehlerbehandlung. Bei synchronen Operationen funktioniert die Policy-Leistungsschalterrichtlinie einwandfrei, aber wenn ich ihre asynchrone Version erstellt habe, wird die Ausführung nicht wiederholt. Freundlicherweise vorschlagen:Polly Framework CircuitBreakerAsync wiederholt nicht, wenn Ausnahme auftritt
Asynchronous Methode:
private async static Task HelloWorld()
{
if (DateTime.Now < programStartTime.AddSeconds(10))
{
Console.WriteLine("Task Failed.");
throw new TimeoutException();
}
await Task.Delay(TimeSpan.FromSeconds(1));
Console.WriteLine("Task Completed.");
}
Polly Leistungsschalter async: Eine
private static void AsyncDemo3(Func<Task> action)
{
programStartTime = DateTime.Now;
Policy policy = Policy
.Handle<TimeoutException>()
.CircuitBreakerAsync(3, TimeSpan.FromSeconds(2));
try
{
var a = policy.ExecuteAndCaptureAsync(action, true).GetAwaiter().GetResult();
}
catch (AggregateException ex)
{
Console.WriteLine("Exception: " + ex.Message);
}
catch (Exception ex)
{
Console.WriteLine("Exception: " + ex.Message);
}
}
den Leistungsschalter Politik Polly Executing:
AsyncDemo3 (Hello World);
Bitte helfen Sie, das Problem zu finden und zu lösen.
Polly hat auch jetzt hat [PolicyWrap] (https://github.com/App-vNext/Polly/wiki/PolicyWrap), die die Syntax für das Kombinieren von Richtlinien noch prägnanter machen kann: 'retryPolicy.WrapAsync (circuitBreakerPolicy) .ExecuteAsync (...)' –