<PackageReference Include="Polly.Core" Version="8.5.0" />

Outcome<TResult>

public struct Outcome<TResult>
Represents the outcome of an operation which could be a result of type TResult or an exception.
using Polly.Utils; using System; using System.Runtime.CompilerServices; using System.Runtime.ExceptionServices; namespace Polly { [System.Runtime.CompilerServices.NullableContext(2)] [System.Runtime.CompilerServices.Nullable(0)] public readonly struct Outcome<TResult> { public Exception Exception => ExceptionDispatchInfo?.SourceException; internal ExceptionDispatchInfo ExceptionDispatchInfo { get; } public TResult Result { get; } internal bool HasResult => ExceptionDispatchInfo == null; internal bool IsVoidResult => ((object)Result) is VoidResult; [System.Runtime.CompilerServices.NullableContext(1)] internal Outcome(Exception exception) { this = default(Outcome<TResult>); ExceptionDispatchInfo = ExceptionDispatchInfo.Capture(Guard.NotNull<Exception>(exception, "exception")); } internal Outcome(TResult result) { this = default(Outcome<TResult>); Result = result; } [System.Runtime.CompilerServices.NullableContext(1)] internal Outcome(ExceptionDispatchInfo exceptionDispatchInfo) { this = default(Outcome<TResult>); ExceptionDispatchInfo = Guard.NotNull<ExceptionDispatchInfo>(exceptionDispatchInfo, "exceptionDispatchInfo"); } public void ThrowIfException() { ExceptionDispatchInfo?.Throw(); } internal bool TryGetResult(out TResult result) { if (HasResult && !IsVoidResult) { result = Result; return true; } result = default(TResult); return false; } [System.Runtime.CompilerServices.NullableContext(1)] public override string ToString() { object obj; if (ExceptionDispatchInfo == null) { TResult result = Result; obj = result?.ToString(); if (obj == null) return string.Empty; } else obj = Exception.Message; return (string)obj; } [System.Runtime.CompilerServices.NullableContext(1)] internal TResult GetResultOrRethrow() { ExceptionDispatchInfo?.Throw(); return Result; } } }