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);
以下三点都成立:
- (a) 和 (b) 都阻止进程继续(后续代码不会 运行)直到语句完成;
- (b) 在 (a) 最初拥有的同一个线程上执行
action
;
- (b) 以 (a) 最初的 same/similar-as-possible 方式表达异常(如果 Policy 操作不干预)。
这些语义 (1) (2) (3) 是有意的,以保持与 Polly 同步执行代码,就像在 semantics/behaviour 中一样(周围代码几乎不需要调整),就像在没有 Polly 的情况下执行代码一样。
期待后续问题:是否可以编写同步 Polly:Policy.Handle<T>().WaitAndRetry(...).Execute(action)
以便它在重试之前等待时不会阻塞线程?:是的,但没有解决方案被发现比让调用者控制转换到 TPL Task
s 或 async
/await
然后使用 Polly 的 ExecuteAsync(...)
.
更可取
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);
以下三点都成立:
- (a) 和 (b) 都阻止进程继续(后续代码不会 运行)直到语句完成;
- (b) 在 (a) 最初拥有的同一个线程上执行
action
; - (b) 以 (a) 最初的 same/similar-as-possible 方式表达异常(如果 Policy 操作不干预)。
这些语义 (1) (2) (3) 是有意的,以保持与 Polly 同步执行代码,就像在 semantics/behaviour 中一样(周围代码几乎不需要调整),就像在没有 Polly 的情况下执行代码一样。
期待后续问题:是否可以编写同步 Polly:Policy.Handle<T>().WaitAndRetry(...).Execute(action)
以便它在重试之前等待时不会阻塞线程?:是的,但没有解决方案被发现比让调用者控制转换到 TPL Task
s 或 async
/await
然后使用 Polly 的 ExecuteAsync(...)
.