private JsonRpcMessage HandleInvocationTaskResult()

in src/StreamJsonRpc/JsonRpc.cs [2153:2205]


        private JsonRpcMessage HandleInvocationTaskResult(JsonRpcRequest request, Task t)
        {
            Requires.NotNull(t, nameof(t));

            if (!t.IsCompleted)
            {
                throw new ArgumentException(Resources.TaskNotCompleted, nameof(t));
            }

            JsonRpcMessage result;
            if (t.IsFaulted)
            {
                Exception exception = StripExceptionToInnerException(t.Exception!);
                if (this.IsFatalException(exception))
                {
                    var e = new JsonRpcDisconnectedEventArgs(
                        string.Format(CultureInfo.CurrentCulture, Resources.FatalExceptionWasThrown, exception.GetType(), exception.Message),
                        DisconnectedReason.FatalException,
                        exception);

                    this.OnJsonRpcDisconnected(e);
                }

                result = this.CreateError(request, t.Exception!);
            }
            else if (t.IsCanceled)
            {
                result = this.CreateCancellationResponse(request);
            }
            else
            {
                JsonRpcResult resultMessage = (this.MessageHandler.Formatter as IJsonRpcMessageFactory)?.CreateResultMessage() ?? new JsonRpcResult();
                resultMessage.RequestId = request.RequestId;
                result = resultMessage;
            }

            if (result is JsonRpcError error)
            {
                if (error.Error is not null && JsonRpcEventSource.Instance.IsEnabled(System.Diagnostics.Tracing.EventLevel.Warning, System.Diagnostics.Tracing.EventKeywords.None))
                {
                    JsonRpcEventSource.Instance.SendingError(request.RequestId.NumberIfPossibleForEvent, error.Error.Code);
                }
            }
            else
            {
                if (JsonRpcEventSource.Instance.IsEnabled(System.Diagnostics.Tracing.EventLevel.Informational, System.Diagnostics.Tracing.EventKeywords.None))
                {
                    JsonRpcEventSource.Instance.SendingResult(request.RequestId.NumberIfPossibleForEvent);
                }
            }

            return result;
        }