Polly
具有多个重试功能,例如WaitAndRetryForever
。我查看了文档,但找不到使线程等到下一次重试的确切用途。我猜Polly
为此使用System.Timers还是完全不同?感谢您的合作。
答案 0 :(得分:2)
异步执行(fooAsyncPolicy.ExecuteAsync(...)
)wait with Task.Delay(...)
,在发生延迟时释放调用者正在使用的线程。
在重试in a cancellable thread-blocking manner之间等待同步执行(fooSyncPolicy.Execute(...)
)。这意味着,对于同步(a):
action();
与同步(b)相比:
policy.Execute(action);
以下三件事全部成立:
action
; 这些语义(1)(2)(3)是有意的,与在没有Polly的情况下执行代码一样,保持与Polly同步执行的代码的语义/行为(周围的代码几乎不需要调整)类似。
预期有后续问题:不可能编写同步Polly:Policy.Handle<T>().WaitAndRetry(...).Execute(action)
,以便在重试之前等待时不会阻塞线程吗?:是,但未找到解决方案最好让呼叫者控制权过渡到TPL Task
或async
/ await
,然后再使用Polly的ExecuteAsync(...)
。