Aquí está mi intento:
private Policy retryPolicy { get; } = Policy .Handle<IOException>() .WaitAndRetryAsync(3, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))); private Policy bigFilePolicy { get; } = Policy .Handle<UnauthorizedAccessException>() .WaitAndRetryForeverAsync(retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))); retryPolicy.ExecuteAsync(() => bigFilePolicy.ExecuteAsync(command)); Estoy tratando de crear una política de reintento para un sistema de carga automática de archivos. Cuando el archivo es demasiado grande, tarda un tiempo en colocarse en la carpeta y, mientras se carga, mi programa da una excepción de acceso no autorizado, en tales casos estoy pensando en permitir WaitAndRetryForever para los archivos grandes. De lo contrario, si obtiene otras excepciones, no debería volver a intentarlo para siempre.
Para combinar políticas, debe llamar a Policy.Wrap / Policy.WrapAsync . Por ejemplo, podrías hacer:
var exponentialBackoffPolicy = Policy.WrapAsync(retryPolicy, bigFilePolicy);O incluso:
var exponentialBackoffPolicy = retryPolicy.WrapAsync(bigFilePolicy);