对于Polly,我希望在两个不同的语句中定义我的策略和执行该策略,如下所示:
// Policy definition
var policy = Policy
.HandleResult<IRestResponse>(predicate)
.Retry(2);
// Policy execution
policy.ExecuteAndCapture(() =>
{
DoSomethingAndReturnAnIRestResponse();
};
我想这样做,以便更好地重用我的重试策略,例如用于依赖注入。
我试图了解在以这种方式拆分策略和执行时是否有任何考虑因素,例如,如果有任何“状态”(因为没有更好的术语)可能不会在policy
对象中携带从策略定义到执行.
沿着这些思路,我注意到当我ExecuteAndCapture()
以上述方式使用 Polly 时,某些属性(与捕获最终异常/结果相关的属性,与 相关联ExecuteAndCapture()
)没有显示在policy
对象上。根据文档(此处和此处),在完成以下政策后:
var policy = Policy
.HandleResult<IRestResponse>(predicate)
.Retry(2)
.ExecuteAndCapture(() =>
{
DoSomethingAndReturnAnIRestResponse();
});
...你应该回来:
PolicyResult.Outcome
PolicyResult.FinalException
PolicyResult.ExceptionType
PolicyResult.Result
这确实发生了,然后ExecuteAndCapture()
在与策略定义相同的语句中。但是,当将策略定义与执行分开时,这些属性不可用。我天真地假设它们会出现在现有policy
对象上,但它们不会:
看来我需要创建一个新的变量赋值才能访问这些属性:
这里有什么顾虑吗?