Polly 使用的是哪种等待机制

Which wait mechanism is Polly using

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

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


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

action();

与同步(b)相比:

policy.Execute(action);

以下三点都成立:

  1. (a) 和 (b) 都阻止进程继续(后续代码不会 运行)直到语句完成;
  2. (b) 在 (a) 最初拥有的同一个线程上执行 action
  3. (b) 以 (a) 最初的 same/similar-as-possible 方式表达异常(如果 Policy 操作不干预)。

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


期待后续问题:是否可以编写同步 Polly:Policy.Handle<T>().WaitAndRetry(...).Execute(action) 以便它在重试之前等待时不会阻塞线程?:是的,但没有解决方案被发现比让调用者控制转换到 TPL Tasks 或 async/await 然后使用 Polly 的 ExecuteAsync(...).

更可取