这段代码运行到最后,没有TimeoutRejectedException
.
如果我将策略改为TimeoutStrategy.Pessimistic
,它将在抛出TimeoutRejectedException
之前进入执行逻辑两次.
如果我想用重试策略在超时后重试,我应该怎么做?(如果它超时,我想在暂停后重试,直到达到MaxRetries
)?
让我的执行逻辑本身抛出超时是唯一的解决方案吗? (代码是.Net Framework4.8,它可以在LinqPad5和Polly v8.3.1上运行).
在这个设置中,Optimistic
策略似乎并没有实际起到什么作用,不是吗?
var retry = Policy
.Handle<Exception>()
.Retry(1);
var timeout = Policy
.Timeout(1, Polly.Timeout.TimeoutStrategy.Optimistic);
var wrap = Policy.Wrap(retry, timeout);
try
{
wrap
.Execute(() =>
{
"Enter executed logic".Dump();
Thread.Sleep(5000);
"Exit executed logic".Dump();
});
}
catch(TimeoutRejectedException ex)
{
ex.Message.Dump();
}