循环中的 DelegatingHandler 和 HttpClient

DelegatingHandler and HttpClient in a loop

我正在尝试循环执行 HttpClient.GetAsync
根据 Microsoft Doc,建议使用 HttpClient 的 1 个实例。

我得到 HttpClient 的方式是

var httpClient = HttpClientFactory.Create(HttpClientRequestHandler.HttpMessageHandler, delegatingHandler);

第一次使用 GetAsync 功能正常,但是当我重新使用 httpClient 引用时,出现错误:The 'DelegatingHandler' list is invalid because the property 'InnerHandler' of 'HttpClientTelemetryHandler' is not null.

当我尝试每次在循环中创建一个新的 HandlerHttpClient 实例时,它工作正常。

现在这是利益冲突。我应该在循环中每次都创建一个新实例,还是有任何其他方法可以做到这一点,这是正确的方法。

附加信息:我用来创建 HttpClient 的自定义库是 .Net Standard 2.0,调用 HttpClient 的客户端应用程序是 .Net Core 2.1.

感谢任何帮助。

谢谢。

通常当您在批处理或循环中重复使用相同的 Handler 实例时会发生此错误。

在每个请求结束时正确处理 HttpClient 可防止此错误。

public class Test{
 private static HttpClient _httpClient;

 SomeFunction(){
 using (var client = new HttpClient(
       HttpClientFactory.CreatePipeline(
       new HttpClientHandler
           {
              CookieContainer = new CookieContainer(),
              UseCookies = true
            },
       new DelegatingHandler[] { new CustomHandler() })))
    {
         //do something with `client`
    }  

 }
}