我正在考虑将HttpClient实现为avoid socket exhaustion的静态。 (如果每次调用使用一个实例,最终会在TIME_WAIT中停留4分钟的套接字,如果执行了足够的调用或者并行运行了足够多的应用程序实例,则套接字将耗尽)。我也了解此方法导致的DNS caching problem,并会添加合适的ConnectionLeaseTimeout
。
但是我的问题与剩下的一个静态HttpClient有关。
first link显示以下示例代码:
private static HttpClient Client = new HttpClient();
但是,对于IDisposable,它应该在不再需要时(即在应用程序关闭期间)处理?虽然对于纯HttpClient可能没有必要,但如果有一个处理程序使用非托管资源呢?我怎么称呼这个呢?或者更具体地说,是否有可以订阅的事件以确保发生这种情况?
修改
这个问题在两个重要方面与建议的副本不同。
HttpClient对象的目标就是你的 应用程序需要发出HTTP请求
意味着在您的应用程序不再需要发出HTTP请求之后就应该进行处理。其他问题和资源表明,如果处理程序具有非托管资源,则需要IDisposable。
事实上,我在审核了这个以及其他几个SO问题之后问了这个问题,以确保没有答案。如果我的问题是重复的,太棒了,我找不到它,重要的是suggested duplicate没有解决这个问题。