internal ReturnToQueue GetConnection(NodeConnectionInfo nodeConnection, TimeSpan timeout, out HttpClient result) { var cacheKey = new HttpCacheKey(nodeConnection, timeout); var connectionQueue = _httpClientsCache.GetOrAdd(cacheKey, _ => new ConcurrentQueue <HttpClient>()); if (connectionQueue.TryDequeue(out result) == false) { var webRequestHandler = new WebRequestHandler { UseDefaultCredentials = nodeConnection.HasCredentials() == false, Credentials = nodeConnection.ToOperationCredentials().Credentials }; result = new HttpClient(webRequestHandler) { BaseAddress = nodeConnection.Uri, Timeout = timeout }; } return(new ReturnToQueue(result, connectionQueue)); }
protected bool Equals(HttpCacheKey other) { return(Equals(NodeConnection, other.NodeConnection) && Timeout.Equals(other.Timeout)); }