protected internal override Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { Uri uri = request.RequestUri; HttpConnectionKey key = new HttpConnectionKey(uri.IdnHost, uri.Port, GetSslHostName(request)); HttpConnectionPool pool = _connectionPools.GetOrAddPool(key); return(pool.SendAsync(request, cancellationToken)); }
private Task <HttpResponseMessage> GetConnectionAndSendAsync(HttpRequestMessage request, Uri proxyUri, CancellationToken cancellationToken) { Debug.Assert(proxyUri.Scheme == UriScheme.Http); var key = new HttpConnectionKey(proxyUri.IdnHost, proxyUri.Port, null); HttpConnectionPool pool = _connectionPools.GetOrAddPool(key); return(pool.SendAsync(request, cancellationToken)); }
private ValueTask <HttpConnection> GetOrCreateConnection(HttpRequestMessage request, Uri proxyUri, CancellationToken cancellationToken) { var key = new HttpConnectionKey(proxyUri); HttpConnectionPool pool = _connectionPools.GetOrAddPool(key); return(pool.GetConnectionAsync(async(state, ct) => { Stream stream = await ConnectHelper.ConnectAsync(state.proxyUri.IdnHost, state.proxyUri.Port, ct).ConfigureAwait(false); return new HttpConnection(state.pool, state.key, null, stream, null, true); }, (pool: pool, key: key, request: request, proxyUri: proxyUri), cancellationToken)); }
protected internal override Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { var key = new HttpConnectionKey(request.RequestUri); HttpConnectionPool pool = _connectionPools.GetOrAddPool(key); ValueTask <HttpConnection> connectionTask = pool.GetConnectionAsync( state => state.handler.CreateConnection(state.request, state.key, state.pool), (handler: this, request: request, key: key, pool: pool)); return(connectionTask.IsCompletedSuccessfully ? connectionTask.Result.SendAsync(request, cancellationToken) : SendAsyncWithAwaitedConnection(connectionTask, request, cancellationToken)); }