Beispiel #1
0
        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));
        }
Beispiel #2
0
        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
				   };
		}
Beispiel #4
0
        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
            });
        }
Beispiel #5
0
		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
			};
		}
Beispiel #6
0
        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
            });
        }
Beispiel #7
0
        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
            });
        }
Beispiel #8
0
 private bool Equals(HttpClientCacheKey other)
 {
     return(string.Equals(ApiKey, other.ApiKey) && Equals(Credentials, other.Credentials) && Timeout.Equals(other.Timeout) && AuthenticationDisabled.Equals(other.AuthenticationDisabled));
 }
Beispiel #9
0
			private bool Equals(HttpClientCacheKey other)
			{
				return string.Equals(ApiKey, other.ApiKey) && Equals(Credentials, other.Credentials) && Timeout.Equals(other.Timeout) && AuthenticationDisabled.Equals(other.AuthenticationDisabled);
			}
Beispiel #10
0
		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);
		}
Beispiel #12
0
        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
            };
        }