コード例 #1
0
        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();
        }
コード例 #2
0
        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);
        }