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