【发布时间】:2020-03-05 17:14:42
【问题描述】:
我听说HttpMessageHandlers 每 2 分钟回收一次,但我不确定是否将新的分配给现有的 HttpClient?
我已经使用SetHandlerLifetime(TimeSpan.FromSeconds(5)); 对其进行了测试,即使在收到无数请求 2 分钟后,httpClient 仍在继续工作,这是一个好兆头吗?
这是否意味着我不必担心 DNS 更改/套接字耗尽?
ConfigureServices方法内部:
var myOptions = app.ApplicationServices.GetService<IOptionsMonitor<MyOptions>>();
HttpClient httpClient = app.ApplicationServices.GetService<IHttpClientFactory>().CreateClient();
MyStaticObject.Configure(myOptions, httpClient);
编辑:添加了一些示例代码。
【问题讨论】:
-
你在哪里实例化你的 HttpClient?如果您使用的是 HttpClientFactory ,它将为您处理生命周期。请参阅文档here。
-
@TylerHundley 在 ConfigureServices 中,我正在创建一个默认的 HttpClient(未键入,未命名,只需直接使用
HttpClientFactory.CreateClient方法,无需任何附加参数。 -
@TylerHundley 我在那里创建的实例,我传递给一个静态字段,它将在应用程序的剩余生命周期中继续存在。这样可以吗?据我了解,
HttpMessageHandlers确实每 2 分钟回收一次,有新的,避免了以前在单例HttpClients中发现的问题? -
你在哪里使用
HttpClientFactory.CreateClient?你在使用依赖注入吗?你能添加一些你在哪里声明/使用你的客户端的示例代码吗? -
@TylerHundley 完成!感谢您到目前为止提供的帮助。
标签: c# asp.net-core httpclient object-lifetime httpclientfactory