private static void ProcessException(TelemetrySpan span, Exception exception) { if (exception is WebException wexc) { if (wexc.Response is HttpWebResponse response) { span.PutHttpStatusCode((int)response.StatusCode, response.StatusDescription); return; } switch (wexc.Status) { case WebExceptionStatus.Timeout: span.Status = Status.DeadlineExceeded; return; case WebExceptionStatus.NameResolutionFailure: span.Status = Status.InvalidArgument.WithDescription(exception.Message); return; case WebExceptionStatus.SendFailure: case WebExceptionStatus.ConnectFailure: case WebExceptionStatus.SecureChannelFailure: case WebExceptionStatus.TrustFailure: span.Status = Status.FailedPrecondition.WithDescription(exception.Message); return; case WebExceptionStatus.ServerProtocolViolation: span.Status = Status.Unimplemented.WithDescription(exception.Message); return; case WebExceptionStatus.RequestCanceled: span.Status = Status.Cancelled; return; case WebExceptionStatus.MessageLengthLimitExceeded: span.Status = Status.ResourceExhausted.WithDescription(exception.Message); return; } } span.Status = Status.Unknown.WithDescription(exception.Message); }