using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
public static async Task Main()
var collection = new ServiceCollection();
collection.AddHttpClient();
collection.AddHttpClient("A")
.AddPolicyHandler(GetCircuitBreakerPolicy());
var sp = collection.BuildServiceProvider();
var factory = sp.GetRequiredService<IHttpClientFactory>();
for(int i=0; i < 10; i++)
var client = factory.CreateClient("A");
var res = await client.GetAsync("http://httpstat.us/500");
static IAsyncPolicy<HttpResponseMessage> GetCircuitBreakerPolicy()
=> Policy<HttpResponseMessage>
.HandleResult(res => res.StatusCode == HttpStatusCode.InternalServerError)
.CircuitBreakerAsync(1, TimeSpan.FromSeconds(2));