У меня есть C # API, который связывается с веб-сервисом, который выдает исключения, если он слишком занят.Я хочу ограничить количество параллельных вызовов для этой службы WCF.
Поскольку веб-служба быстро выдает исключения, когда она слишком занята, я хочу использовать Bulkhead в сочетании с повторной попыткой, и я явно хочу, чтобы Bulkhead применялся первым, чтобы ограничить число вызовов, ожидающих вПовторите политику.Документация PolicyWrap гласит, что обычно все должно быть наоборот, но в моем случае мне нужно вот так.
Однако это не работает.Я провожу тест производительности с 40 одновременными вызовами, и он продолжает повторять все 40 вызовов параллельно.
Это определение политики:
var retryPolicy = Policy.HandleResult<wcfResponse>(r => !r.IsSuccessStatus())
.Or<TimeoutException>()
.Or<CommunicationException>()
.WaitAndRetryAsync(60, i => TimeSpan.FromSeconds(1),
// setting maxParallel to 1 and a large queue,
// so I only expect one call to be retrying at the same time.
// However, it is doing all 40 calls in parallel,
// the bulkhead seems to be ignored and the retry policy
// kicks in for all requests in parallel.
var bulkHeadPolicy = Policy.BulkheadAsync(1, 100);
return bulkHeadPolicy.WrapAsync(retryPolicy);
Что мне здесь не хватает?