Esta es mi política de mamparo:
BulkheadPolicy = Policy .BulkheadAsync(maxParallelization: 2, maxQueuingActions: 2, onBulkheadRejectedAsync: (context) => { Console.WriteLine("Rejected"); return Task.CompletedTask; }); Debería permitir solo 4 tareas simultáneas para ejecutar/esperar la ejecución.
Sin embargo, termino obteniendo 6 tareas que pueden ejecutarse a través de la política de mamparo.
Esta es la acción de mi controlador:
[HttpGet("bulkhead")] public async Task<object> Bulkhead() { Console.WriteLine(DateTime.UtcNow); var bhCount = _policyManager.BulkheadPolicy.BulkheadAvailableCount; var queueCount = _policyManager.BulkheadPolicy.QueueAvailableCount; // The policy is used here await _policyManager.BulkheadPolicy.ExecuteAsync(async (context) => { await Task.Delay(10000); }, new Context()); return new { bhCount, queueCount }; }En mi navegador, utilicé este script para simular 14 tareas simultáneas:
for (var i = 0; i < 14; i++) { fetch('https://localhost:44313/api/Bulkheads/bulkhead') .then(result=>console.log(result)); } que debería producir solo 4 200OK respuestas. Sin embargo, termino recibiendo 6 200OK respuestas. Hice la prueba muchas veces y obtuve el mismo resultado. ¿Alguien tiene una idea de por qué, dado que el mismo comportamiento funciona bien con una aplicación de consola? ¿Me perdí algo aquí? Muchas gracias.
ACTUALIZACIÓN 1 : Esta es mi interfaz IPolicyManager
public interface IPolicyManager { AsyncBulkheadPolicy BulkheadPolicy { get; } } public class PolicyManager : IPolicyManager { public PolicyManager() { Init(); } public AsyncBulkheadPolicy BulkheadPolicy { get; private set; } private void Init() { BulkheadPolicy = Policy .BulkheadAsync(maxParallelization: 2, maxQueuingActions: 2, onBulkheadRejectedAsync: (context) => { Console.WriteLine("Rejected"); return Task.CompletedTask; }); } }ACTUALIZACIÓN 2 : cuando envío una solicitud fija (URL fija), falla bastante lento, pero cuando agrego un argumento aleatorio en las solicitudes, el resultado es el esperado (falla rápidamente y solo pueden continuar 4 solicitudes).
for (var i = 0; i < 14; i++) { fetch('https://localhost:44313/api/Bulkheads/bulkhead?count=' + i) .then(result=>console.log(result)); }Resultó que el comportamiento del navegador no era el esperado. Escribí una aplicación de consola que hace la misma tarea y funciona bien: falla rápido y solo pueden continuar 4 solicitudes a la vez. Entonces puedo confirmar que esto no es un problema de Polly o ASP.NET Core. Tal vez se relacione con el mecanismo de almacenamiento en caché del navegador web (estoy usando Edge): https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching