Flurl имеет возможность периодически располагать / воссоздавать базовые HttpClient
экземпляры через глобальную конфигурацию (выполняется при запуске приложения):
FlurlHttp.Configure(settings => settings.ConnectionLeaseTimeout = TimeSpan.FromMinutes(2));
Это похоже на популярное решение дляПроблема DNS , которая использует .NET Framework ServicePointManager.ConnectionLeaseTimeout
, за исключением того, что она работает на всех платформах.
Альтернативой, представленной в .NET Core 2.1, является использование довольно плохо документированного SocketsHttpHandler.PooledConnectionLifetime . Это рекомендуемое решение для .NET Core, и Flurl может подключиться к нему с помощью собственной фабрики:
public class ConnectionLifetimeHttpClientFactory : DefaultHttpClientFactory
{
public override HttpMessageHandler CreateMessageHandler()
{
return new SocketsHttpHandler {
PooledConnectionLifetime = TimeSpan.FromMinutes(2);
};
}
}
Затем зарегистрировать его при запуске:
FlurlHttp.Configure(settings =>
settings.HttpClientFactory = new ConnectionLifetimeHttpClientFactory());
В качестве предупреждения, я на самом деле не проверял это, но он должен работать, и я, вероятно, рекомендую его немного по сравнению с первым вариантом, так как он задействует более функциональные возможности платформы и поэтому, вероятно, немного более эффективен.