Esempio n. 1
0
        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();
        }
Esempio n. 2
0
        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();
        }
Esempio n. 3
0
        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();
        }
Esempio n. 4
0
        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();
        }