コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }