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