假设我们有代码片段
builder.Services.AddHttpClient("typicode", c =>
{
c.BaseAddress = new Uri("https://xxx");
c.DefaultRequestHeaders.Add(
"accept", "application/json");
})
.ConfigurePrimaryHttpMessageHandler(() => new SocketsHttpHandler()
{
PooledConnectionLifetime = TimeSpan.FromMinutes(5),
})
.SetHandlerLifetime(TimeSpan.FromMinutes(10));
我不太明白为什么需要调用它SetHandlerLifetime(TimeSpan.FromMinutes(10)
,或者调用它有什么好处?我知道它控制着实例(及其连接池)在“处理程序级别”的重用SetHandlerLifetime
时长,以及在“连接级别”的重用时长。SocketsHttpHandler
PooledConnectionLifetime = TimeSpan.FromMinutes(5)
但使用还不够吗PooledConnectionLifetime = TimeSpan.FromMinutes(5)
,想象一下我使用这个 HttpClient 对不同的 url 进行多个请求,例如 foo1.com、foo2.com......foo10.com,我希望在连接级别上使用 5 分钟的 PooledConnectionIdleTimeout,例如 foo1.com 的连接在 5 分钟后过期,但 foo2.com 仍然处于活动状态并且我想稍后重新使用它,但是 SetHandlerLifetime 会在 10 分钟后清除所有池?