private async Task SucceedsAfterFirstCircuitBreakAsync(Policy breakCircuitAfterTwoFailuresPolicy) { Console.WriteLine("----------- Succeeds after first circuit break-----------"); var service = new FailForSomeTimeStuffService(TimeSpan.FromSeconds(1)); for (var i = 0; i < 7; ++i) { try { await breakCircuitAfterTwoFailuresPolicy.ExecuteAsync(async() => { await ThrowBoomerangAsync(service); }); } catch (BrokenCircuitException) { Console.WriteLine("Broken circuit exception, must wait until circuit is closed again."); await Task.Delay(1000); } catch (BoomerangThrowFailedException) { Console.WriteLine("Failed an execution."); } } }
protected async Task SucceedAfterWaitingThreeTimesRetryAsync(Policy retryAndWaitPolicy) { Console.WriteLine("----------- Succeeds after waiting three times-----------"); var service = new FailForSomeTimeStuffService(TimeSpan.FromSeconds(8)); await retryAndWaitPolicy.ExecuteAsync(async() => { await ThrowBoomerangAsync(service); }); }
protected async Task FailAfterAllWaitsAsync(Policy retryAndWaitPolicy) { Console.WriteLine("----------- Fails after all waits -----------"); var service = new FailForSomeTimeStuffService(TimeSpan.FromSeconds(10)); try { await retryAndWaitPolicy.ExecuteAsync(async() => { await ThrowBoomerangAsync(service); }); } catch (BoomerangThrowFailedException) { Console.WriteLine("-> Failed more times than specified waits."); } }