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);
            }