在我的一个.net核心项目中,我必须调用REST来向客户端发送一些数据。总是有超过9-10个具有不同apis的客户端具有自己的域和自定义标头。如果我每次都创建HttpClient对象,这将影响性能,因为每次都会创建和关闭新TCP连接。如果我将使用单例设计模式创建单个HttpClient对象,那么每个客户端都将使用相同的基本url和默认标题。有人能提出一个解决这个问题的方法吗?我不想在每次有新的客户端应用程序接口用于集成时都创建新的HttpClient。
发布于 2018-01-07 23:48:36
如果你要调用9-10个不同的HttpClient
,那么9-10个静态API实例是最好的。如果编码9-10个实例感觉有点凌乱/重复,你可以将它们包装在一个字典对象中,特别是ConcurrentDictionary将有助于保持实例化的惰性和线程安全。像这样的东西应该是有效的:
public static class HttpClientManager
{
private static ConcurrentDictionary<string, HttpClient> _clients =
new ConcurrentDictionary<string, HttpClient>();
public static HttpClient Get(string baseUrl)
{
return _clients.GetOrAdd(baseUrl, _ =>
new HttpClient { BaseAddress = new Uri(baseUrl) });
}
}
然后,只要你需要使用,它就是HttpClientManager.Get(baseUrl)
。
https://stackoverflow.com/questions/48135175
复制相似问题