public Task <Response <T1, T2, T3> > GetResponse <T1, T2, T3>(object values, RequestPipeConfiguratorCallback <TRequest> callback, CancellationToken cancellationToken = default, RequestTimeout timeout = default) where T1 : class where T2 : class where T3 : class { return(impl.GetResponse <T1, T2, T3>(values, callback, cancellationToken, timeout)); }
public Task <Response <T> > GetResponse <T>(TRequest message, RequestPipeConfiguratorCallback <TRequest> callback, CancellationToken cancellationToken = default, RequestTimeout timeout = default) where T : class { async Task <TRequest> Request(Guid requestId, IPipe <SendContext <TRequest> > pipe, CancellationToken token) { await _requestSendEndpoint.Send(requestId, message, pipe, token).ConfigureAwait(false); return(message); } return(GetResponseInternal <T>(Request, cancellationToken, timeout, callback)); }
public Task <Response <T> > GetResponse <T>(object values, RequestPipeConfiguratorCallback <TRequest> callback, CancellationToken cancellationToken = default, RequestTimeout timeout = default) where T : class { if (values == null) { throw new ArgumentNullException(nameof(values)); } async Task <TRequest> Request(Guid requestId, IPipe <SendContext <TRequest> > pipe, CancellationToken token) { return(await _requestSendEndpoint.Send(requestId, values, pipe, token).ConfigureAwait(false)); } return(GetResponseInternal <T>(Request, cancellationToken, timeout, callback)); }
async Task <Response <T1, T2, T3> > GetResponseInternal <T1, T2, T3>(ClientRequestHandle <TRequest> .SendRequestCallback request, CancellationToken cancellationToken, RequestTimeout timeout, RequestPipeConfiguratorCallback <TRequest> callback = null) where T1 : class where T2 : class where T3 : class { using RequestHandle <TRequest> handle = new ClientRequestHandle <TRequest>(_context, request, cancellationToken, timeout.Or(_timeout)); callback?.Invoke(handle); Task <Response <T1> > result1 = handle.GetResponse <T1>(false); Task <Response <T2> > result2 = handle.GetResponse <T2>(false); Task <Response <T3> > result3 = handle.GetResponse <T3>(); var task = await Task.WhenAny(result1, result2, result3).ConfigureAwait(false); await task.ConfigureAwait(false); return(new Response <T1, T2, T3>(result1, result2, result3)); }
async Task <Response <T> > GetResponseInternal <T>(ClientRequestHandle <TRequest> .SendRequestCallback request, CancellationToken cancellationToken, RequestTimeout timeout, RequestPipeConfiguratorCallback <TRequest> callback = null) where T : class { using RequestHandle <TRequest> handle = new ClientRequestHandle <TRequest>(_context, request, cancellationToken, timeout.Or(_timeout)); callback?.Invoke(handle); return(await handle.GetResponse <T>().ConfigureAwait(false)); }
public Task <Response <T1, T2> > GetResponse <T1, T2>(TRequest message, RequestPipeConfiguratorCallback <TRequest> callback, CancellationToken cancellationToken = default, RequestTimeout timeout = default) where T1 : class where T2 : class { return(impl.GetResponse <T1, T2>(message, callback, cancellationToken, timeout)); }