public void ReleaseClient(HttpClient client, OperationCredentials credentials) { var key = new HttpClientCacheKey(client.Timeout, credentials); var queue = cache.GetOrAdd(key, i => new ConcurrentStack <Tuple <long, HttpClient> >()); queue.Push(Tuple.Create(Stopwatch.GetTimestamp(), client)); }
public void ReleaseClient(HttpClient client, OperationCredentials credentials) { var key = new HttpClientCacheKey(client.Timeout, credentials); var queue = cache.GetOrAdd(key, i => new ConcurrentQueue <HttpClient>()); queue.Enqueue(client); }
public HttpClient GetClient(TimeSpan timeout, OperationCredentials credentials, Func<HttpMessageHandler> handlerFactory) { var key = new HttpClientCacheKey(timeout, credentials); var queue = cache.GetOrAdd(key, i => new ConcurrentQueue<HttpClient>()); HttpClient client; if (queue.TryDequeue(out client)) { client.CancelPendingRequests(); client.DefaultRequestHeaders.Clear(); return client; } return new HttpClient(handlerFactory()) { Timeout = timeout }; }
public HttpClient GetClient(TimeSpan timeout, OperationCredentials credentials, Func <HttpMessageHandler> handlerFactory) { var key = new HttpClientCacheKey(timeout, credentials); var queue = cache.GetOrAdd(key, i => new ConcurrentQueue <HttpClient>()); HttpClient client; if (queue.TryDequeue(out client)) { client.CancelPendingRequests(); client.DefaultRequestHeaders.Clear(); return(client); } return(new HttpClient(handlerFactory()) { Timeout = timeout }); }
public HttpClient GetClient(TimeSpan timeout, OperationCredentials credentials, Func<HttpMessageHandler> handlerFactory) { var key = new HttpClientCacheKey(timeout, credentials); var queue = cache.GetOrAdd(key, i => new ConcurrentQueue<Tuple<long, HttpClient>>()); Tuple<long, HttpClient> client; while (queue.TryDequeue(out client)) { if (Stopwatch.GetTimestamp() - client.Item1 > _maxIdleTime) { client.Item2.Dispose(); continue; } client.Item2.CancelPendingRequests(); client.Item2.DefaultRequestHeaders.Clear(); return client.Item2; } return new HttpClient(handlerFactory()) { Timeout = timeout }; }
public HttpClient GetClient(TimeSpan timeout, OperationCredentials credentials, Func <HttpMessageHandler> handlerFactory) { var key = new HttpClientCacheKey(timeout, credentials); var stack = cache.GetOrAdd(key, i => new ConcurrentStack <Tuple <long, HttpClient> >()); Tuple <long, HttpClient> client; while (stack.TryPop(out client)) { if (IsClientTooOld(client.Item1)) { client.Item2.Dispose(); continue; } client.Item2.CancelPendingRequests(); client.Item2.DefaultRequestHeaders.Clear(); return(client.Item2); } return(new HttpClient(handlerFactory()) { Timeout = timeout }); }
public HttpClient GetClient(TimeSpan timeout, OperationCredentials credentials, Func <HttpMessageHandler> handlerFactory) { var key = new HttpClientCacheKey(timeout, credentials); var queue = cache.GetOrAdd(key, i => new ConcurrentQueue <Tuple <long, HttpClient> >()); Tuple <long, HttpClient> client; while (queue.TryDequeue(out client)) { if (Stopwatch.GetTimestamp() - client.Item1 >= _maxIdleTimeInStopwatchTicks) { client.Item2.Dispose(); continue; } client.Item2.CancelPendingRequests(); client.Item2.DefaultRequestHeaders.Clear(); return(client.Item2); } return(new HttpClient(handlerFactory()) { Timeout = timeout }); }
private bool Equals(HttpClientCacheKey other) { return(string.Equals(ApiKey, other.ApiKey) && Equals(Credentials, other.Credentials) && Timeout.Equals(other.Timeout) && AuthenticationDisabled.Equals(other.AuthenticationDisabled)); }
private bool Equals(HttpClientCacheKey other) { return string.Equals(ApiKey, other.ApiKey) && Equals(Credentials, other.Credentials) && Timeout.Equals(other.Timeout) && AuthenticationDisabled.Equals(other.AuthenticationDisabled); }
public void ReleaseClient(HttpClient client, OperationCredentials credentials) { var key = new HttpClientCacheKey(client.Timeout, credentials); var queue = cache.GetOrAdd(key, i => new ConcurrentQueue<Tuple<long, HttpClient>>()); queue.Enqueue(Tuple.Create(Stopwatch.GetTimestamp(), client)); }
public void ReleaseClient(HttpClient client, OperationCredentials credentials) { var key = new HttpClientCacheKey(client.Timeout, credentials); var queue = cache.GetOrAdd(key, i => new ConcurrentQueue<HttpClient>()); queue.Enqueue(client); }
public HttpClient GetClient(TimeSpan timeout, OperationCredentials credentials, Func<HttpMessageHandler> handlerFactory) { var key = new HttpClientCacheKey(timeout, credentials); var stack = cache.GetOrAdd(key, i => new ConcurrentStack<Tuple<long, HttpClient>>()); Tuple<long, HttpClient> client; while (stack.TryPop(out client)) { if (IsClientTooOld(client.Item1)) { client.Item2.Dispose(); continue; } client.Item2.CancelPendingRequests(); client.Item2.DefaultRequestHeaders.Clear(); return client.Item2; } return new HttpClient(handlerFactory()) { Timeout = timeout }; }