我定义了以下Polly策略:
sharedBulkhead = Policy.Bulkhead(maxParallelizations, maxQueuingActions);
resilienceStrategy = Policy.Wrap(retryPolicy, circuitBreaker, sharedBulkhead);
policyWrap = fallbackForAnyException.Wrap(fallbackForCircuitBreaker.Wrap(resilienceStrategy));我像这样执行策略:
public bool Notify(IGrouping<string, TModel> messages)
{
var endPoint = messages.Key;
Task.Run(() =>
{
foreach (var message in messages)
{
policyWrap.Execute((context) => CallApi(endPoint), new Context(endPoint));
}
});
return true;
}我希望每个对Notify()的调用都在一个新线程上运行。所以,我的问题是:我必须显式地为新线程调用Task.Run(() =>,还是由polly自动在新线程上运行?
发布于 2018-12-18 04:28:07
Notify我希望每次调用
()都能在一个新的线程上运行。所以,我的问题是:...这是由polly自动在新线程上运行的吗?
不是的。正如Polly bulkhead wiki page所说:
策略本身不会对线程进行调用;它假定上游系统已经对线程进行了调用,但限制了它们的并行化执行
Polly中没有任务调度(使用TaskScheduler)的概念(除了非常特殊的同步悲观TimeoutPolicy的情况下的完整性)。
但是,为了完整性,所有Polly策略都是线程安全的。
https://stackoverflow.com/questions/53820896
复制相似问题