2

我刚刚添加了使用 HttpClients 的新推荐方式,即使用与 Polly 集成的 HttpClientFactory

这是我的 DI

        services.AddHttpClient("ThirdParty", client =>
        {
            //commented out for the purpose of this question

            //client.Timeout =
            //    TimeSpan.FromSeconds(configProvider.OverallTimeout); 

        });

这是服务提供商代码

            using (var client = _clientFactory.CreateClient("ThirdParty"))
            {

                 ....

                 //write log for start time

                 var response = await client.PostAsync(url, content);

                 //write log for end time

                 ....
             }

现在,上面的服务提供者代码在一个被多次调用的类中,比如对进入服务的每个请求调用 6 次

我运行的示例测试是向服务发出一个请求,该服务又调用服务提供者类 6 次,向第三方发出 6 个单独的请求以检索响应。

我还将第三方设置为延迟 5 秒,因此我期望发生的是同时触发所有 6 个请求,并且所有响应在 5 秒后返回,因为客户端工厂应该创建 http 客户端暂时的

然而,我发现请求似乎在它们的响应时间上配对,即前两个需要 5 秒,后两个需要 10 秒,最后两个需要 15 秒,即使它们实际上都被解雇了完全相同的时间

如果我将代码更改为

使用 (var client = _clientFactory.CreateClient("randomString"))... (所以它没有引用 DI 中的“第三方”自定义配置,(即使它本身还没有做任何事情))

它工作正常,所有响应在 5 秒后返回。

另外,如果我将代码更改为以前的代码

使用 (var client = new HttpClient())...

这也按预期工作,所有响应在 5 秒后返回

因此,它似乎与为 DI 进行自定义设置有关。

有任何想法吗?

我也尝试过使用 TypedClients 而不是上面的 NamedClients 方法,我得到了相同的结果

更新

仅当托管在服务结构应用程序中时才会出现此问题

4

0 回答 0