我刚刚添加了使用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中的“ ThirdParty”自定义配置,(即使它本身还没有执行任何操作))
它工作正常,所有响应都在5秒钟后返回。
如果我将代码更改为以前的版本,则
使用(var client = new HttpClient())...
这也可以按预期工作,并且5秒后所有响应都会返回
因此,这似乎与为DI进行自定义设置有关。
有什么想法吗?
我也尝试使用TypedClients而不是上面的NamedClients方法,并且得到相同的结果
UPDATE
仅当托管在服务结构应用程序中时,才会出现此问题