static async Task AwaitHandleCall(HttpApiServerCallContext serverCallContext, Method <TRequest, TResponse> method, bool isStreaming, JsonSerializerOptions serializerOptions, Task handleCall) { try { await handleCall; await serverCallContext.EndCallAsync(); } catch (Exception ex) { await serverCallContext.ProcessHandlerErrorAsync(ex, method.Name, isStreaming, serializerOptions); } }
public Task HandleCallAsync(HttpContext httpContext) { var serverCallContext = new HttpApiServerCallContext(httpContext, MethodInvoker.Options, MethodInvoker.Method, DescriptorInfo, Logger); httpContext.Features.Set <IServerCallContextFeature>(serverCallContext); try { var handleCallTask = HandleCallAsyncCore(httpContext, serverCallContext); if (handleCallTask.IsCompletedSuccessfully) { return(serverCallContext.EndCallAsync()); } else { return(AwaitHandleCall(serverCallContext, MethodInvoker.Method, IsStreaming, SerializerOptions, handleCallTask)); } } catch (Exception ex) { return(serverCallContext.ProcessHandlerErrorAsync(ex, MethodInvoker.Method.Name, IsStreaming, SerializerOptions)); }