[Fork]

CSharp · Console

/Program.cs

    using Polly; 
    using System;
    using System.Threading.Tasks;

    public class Program
    {
		public static void Main(string[] args)
		{
			MainAsync(args).GetAwaiter().GetResult();
		}
		
		static async Task MainAsync(string[] args)
		{
			var circuitBreaker = Policy
				.Handle<Exception>()
				.CircuitBreakerAsync(
					3, // ConsecutiveExceptionsAllowedBeforeBreaking,
					TimeSpan.FromSeconds(5) // DurationOfBreak
				);

			Console.WriteLine("Circuit state before execution: " + circuitBreaker.CircuitState);

			await circuitBreaker.ExecuteAsync(() => Task.Delay(25));
			await circuitBreaker.ExecuteAsync(() => Task.Delay(25));
			await circuitBreaker.ExecuteAsync(() => { throw new System.Exception(); });
			await circuitBreaker.ExecuteAsync(() => Task.Delay(25));
			await circuitBreaker.ExecuteAsync(() => Task.Delay(25));

			Console.WriteLine("Circuit state after execution: " + circuitBreaker.CircuitState);
		}
    }
;