PolicyBase
Implements elements common to both non-generic and generic policies, and sync and async policies.
using Polly.Utilities;
using System;
using System.Threading;
namespace Polly
{
public abstract class PolicyBase
{
protected string policyKeyInternal;
internal const bool DefaultContinueOnCapturedContext = false;
internal readonly CancellationToken DefaultCancellationToken = CancellationToken.None;
public string PolicyKey => policyKeyInternal ?? (policyKeyInternal = GetType().Name + "-" + KeyHelper.GuidPart());
protected internal ExceptionPredicates ExceptionPredicates { get; }
internal static ArgumentException PolicyKeyMustBeImmutableException(string policyKeyParamName)
{
return new ArgumentException("PolicyKey cannot be changed once set; or (when using the default value after the PolicyKey property has been accessed.", policyKeyParamName);
}
internal static void RestorePolicyContext(Context executionContext, string priorPolicyWrapKey, string priorPolicyKey)
{
executionContext.PolicyWrapKey = priorPolicyWrapKey;
executionContext.PolicyKey = priorPolicyKey;
}
internal virtual void SetPolicyContext(Context executionContext, out string priorPolicyWrapKey, out string priorPolicyKey)
{
priorPolicyWrapKey = executionContext.PolicyWrapKey;
priorPolicyKey = executionContext.PolicyKey;
executionContext.PolicyKey = PolicyKey;
}
internal static ExceptionType GetExceptionType(ExceptionPredicates exceptionPredicates, Exception exception)
{
if (exceptionPredicates.FirstMatchOrDefault(exception) == null)
return ExceptionType.Unhandled;
return ExceptionType.HandledByThisPolicy;
}
private protected PolicyBase(ExceptionPredicates exceptionPredicates)
{
ExceptionPredicates = (exceptionPredicates ?? ExceptionPredicates.None);
}
protected PolicyBase(PolicyBuilder policyBuilder)
: this(policyBuilder?.ExceptionPredicates)
{
}
}
}