public override AsyncUnaryCall <TResponse> AsyncUnaryCall <TRequest, TResponse>(TRequest request, ClientInterceptorContext <TRequest, TResponse> context, AsyncUnaryCallContinuation <TRequest, TResponse> continuation) { var call = continuation(request, context); return(new AsyncUnaryCall <TResponse>(HandleResponse(call), call.ResponseHeadersAsync, call.GetStatus, call.GetTrailers, call.Dispose)); async Task <TResponse> HandleResponse(AsyncUnaryCall <TResponse> call) { try { return(await call.ResponseAsync); } finally { try { StatusTcs.SetResult(call.GetStatus().StatusCode); } catch (Exception ex) { StatusTcs.SetException(ex); } } } }
public override AsyncUnaryCall <TResponse> AsyncUnaryCall <TRequest, TResponse>(TRequest request, ClientInterceptorContext <TRequest, TResponse> context, AsyncUnaryCallContinuation <TRequest, TResponse> continuation) { var result = continuation(request, context); result.GetAwaiter().OnCompleted(() => { try { StatusTcs.SetResult(result.GetStatus().StatusCode); } catch (Exception ex) { StatusTcs.SetException(ex); } }); return(result); }