static async Task Main(string[] args) { const string TestClient = "TestClient"; IServiceCollection services = new ServiceCollection(); services.AddHttpClient(TestClient) .AddPolicyHandler(AsyncTimingPolicy <HttpResponseMessage> .Create(PublishTiming)); HttpClient configuredClient = services .BuildServiceProvider() .GetRequiredService <IHttpClientFactory>() .CreateClient(TestClient); string[] urls = { "https://www.google.com/", "https://www.google.co.uk/", "https://www.bbc.co.uk/" }; foreach (var url in urls) { var context = new Context { ["url"] = url }; HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, url); request.SetPolicyExecutionContext(context); var result = await configuredClient.SendAsync(request, default(CancellationToken)); } Console.ReadKey(); }
public async Task PolicyCapturesTimingOfExecutedDelegate() { TimeSpan elapsed = TimeSpan.MinValue; Func <TimeSpan, Context, Task> capturedElapsed = (t, _) => { elapsed = t; return(Task.CompletedTask); }; AsyncTimingPolicy policy = AsyncTimingPolicy.Create(capturedElapsed); TimeSpan forcedDelay = TimeSpan.FromSeconds(1); await policy.ExecuteAsync(() => Task.Delay(forcedDelay)); elapsed.Should().BeCloseTo(forcedDelay); }