private static void Main(string[] args) { var unstableService = new MrUnstable(); ISyncPolicy redo1 = Policy.Handle <ApplicationException>() .Retry(1, (exception, count) => { Console.WriteLine($"ApplicationException, exception:{exception.Message}, count:{count}"); }); ISyncPolicy benFallback = Policy.Handle <ApplicationException>() .Fallback(() => { Console.WriteLine("Execute Fallback action"); }, ex => { Console.WriteLine($"on fallback, exception message:{ex.Message.ToString()}"); }); benFallback.Execute(() => { redo1.Execute(() => { unstableService.SpecificException(new ApplicationException()); }); }); Console.Read(); }
private static void Main(string[] args) { var unstableService = new MrUnstable(); ISyncPolicy redo1 = Policy.Handle <ApplicationException>() .Retry(1, (exception, count) => { Console.WriteLine($"ApplicationException, exception:{exception.Message}, count:{count}"); }); ISyncPolicy redo2 = Policy.Handle <NullReferenceException>() .Retry(1, (exception, count) => { Console.WriteLine($"NullReferenceException, exception:{exception.Message}, count:{count}"); }); ISyncPolicy redo3 = Policy.Handle <InvalidOperationException>() .WaitAndRetry(2, (retryCounter, context) => { Console.WriteLine($"InvalidOperationException, retryCounter:{retryCounter}, Context:{context}"); return(TimeSpan.FromSeconds(Math.Pow(2, retryCounter))); }); ISyncPolicy myPolicyWrap = Policy.Wrap(redo1, redo2, redo3); try { myPolicyWrap.Execute(() => unstableService.SpecificException(new InvalidOperationException())); } catch (Exception) { Console.WriteLine("DotNetPollyEssential outsight try catch!"); } finally { Console.WriteLine("DotNetPollyEssential Finished!"); } Console.Read(); }
private static void Main(string[] args) { var builder = new ContainerBuilder(); builder.RegisterModule <PolicyModule>(); var container = builder.Build(); var unstableService = new MrUnstable(); using (var lifetimeScope = container.BeginLifetimeScope()) { var policy = lifetimeScope.ResolveNamed <IBenPolicy>("MyPolicyOne"); try { var context = new Dictionary <string, object>() { { "Name", "benjamin fan" }, { "Age", 30 } }; policy.ExecuteWithPolicy(() => { unstableService.RandomException(); }, context); } catch (Exception) { } finally { Console.WriteLine("PollyWithIoC Finished!"); } } Console.Read(); }
private static void Main(string[] args) { var unstableService = new MrUnstable(); ISyncPolicy redo1 = Policy.Handle <ApplicationException>() .CircuitBreaker( exceptionsAllowedBeforeBreaking: 2, durationOfBreak: TimeSpan.FromSeconds(3)); ISyncPolicy redo2 = Policy.Handle <NullReferenceException>() .CircuitBreaker( exceptionsAllowedBeforeBreaking: 2, durationOfBreak: TimeSpan.FromSeconds(3), onBreak: (exception, state, timespan, context) => { Console.WriteLine("NullReferenceException call onBreak Action delegate"); }, onReset: (ctx) => { Console.WriteLine("NullReferenceException call onReset Action delegate"); }, onHalfOpen: () => { Console.WriteLine("NullReferenceException call onHalfOpen Action delegate"); } ); ISyncPolicy redo3 = Policy.Handle <InvalidOperationException>() .AdvancedCircuitBreaker( failureThreshold: 0.5, samplingDuration: TimeSpan.FromSeconds(10), minimumThroughput: 8, durationOfBreak: TimeSpan.FromSeconds(10), onBreak: (exception, timespan) => { Console.WriteLine("InvalidOperationException call onBreak Action delegate"); }, onReset: () => { Console.WriteLine("InvalidOperationException call onReset Action delegate"); }, onHalfOpen: () => { Console.WriteLine("InvalidOperationException call onHalfOpen Action delegate"); }); ISyncPolicy myPolicyWrap = Policy.Wrap(redo1, redo2, redo3); for (var index = 0; index < 10; index++) { try { SpinWait.SpinUntil(() => false, 1000); myPolicyWrap.Execute( () => unstableService.SpecificException(new InvalidOperationException())); } catch (Exception) { Console.WriteLine("Outside catch the exception!"); } finally { Console.WriteLine("DotNetPollyEssential Finished!"); } } Console.Read(); }