Polly使用哪种等待机制

时间:2019-02-12 07:17:41

标签: polly

Polly具有多个重试功能,例如WaitAndRetryForever。我查看了文档,但找不到使线程等到下一次重试的确切用途。我猜Polly为此使用System.Timers还是完全不同?感谢您的合作。

1 个答案:

答案 0 :(得分:2)

异步执行(fooAsyncPolicy.ExecuteAsync(...)wait with Task.Delay(...),在发生延迟时释放调用者正在使用的线程。


在重试in a cancellable thread-blocking manner之间等待同步执行(fooSyncPolicy.Execute(...))。这意味着,对于同步(a):

action();

与同步(b)相比:

policy.Execute(action);

以下三件事全部成立:

  1. (a)和(b)都阻止继续执行进度(后续代码不运行),直到语句完成;
  2. (b)在(a)最初具有的同一线程上执行action
  3. (b)以与(a)最初相同/类似的方式表示异常(如果不执行策略操作)。

这些语义(1)(2)(3)是有意的,与在没有Polly的情况下执行代码一样,保持与Polly同步执行的代码的语义/行为(周围的代码几乎不需要调整)类似。


预期有后续问题:不可能编写同步Polly:Policy.Handle<T>().WaitAndRetry(...).Execute(action),以便在重试之前等待时不会阻塞线程吗?:是,但未找到解决方案最好让呼叫者控制权过渡到TPL Taskasync / await,然后再使用Polly的ExecuteAsync(...)