Конечно, почти каждый сталкивался с проблемой повторения действий по каким-то причинам: простой повтор (из-за какой-то конкретной ошибки), повторный вызов внешних служб с некоторыми прогрессивными интервалами (2 с, 4 с, 8 с… .2 ^ нс) , выполнение определенного количества повторных попыток перед выходом и т. д. Реализация таких политик «повторных попыток» также различается (я уверен, что некоторые из вас даже используют GOTO на языках, которые имеют возможность использовать это ключевое слово, хотя это известный факт быть опасным!).

Но зачем создавать еще один велосипед, когда их много, и одна из них - Polly. Polly - это платформа .NET, которая позволяет вам свободно писать политики для Retry, Circuit Breaker, Timeout и других задач. Polly нацелен на .NET 4.0, .NET 4.5 и .NET Standard 1.0 (охват: .NET Core, Mono, Xamarin.iOS, Xamarin.Android, UWP, WP8.0 +).

Чтобы установить его, просто используйте пакет Nuget:

Install-Package Polly

В этом посте давайте сделаем краткий старт с политикой Retry. Когда тебе это нужно? Например, наш блок кода запрашивает базу данных, и возникает взаимоблокировка, возникает исключение с предложением повторить операцию позже; так что вот возможный случай: вы просто пытаетесь повторить разумный блок, чтобы завершить операцию, возникнут взаимоблокировки, и вам нужно будет обработать их в некоторых критических местах. Для упрощения (чтобы показать реальный небольшой рабочий проект) мы будем использовать здесь некоторый синтетический процесс генерации исключения и покажем политику повтора в действии в случае этого исключения.

Код очень прост, и вы можете легко угадать ход выполнения из-за свободного синтаксиса.

Результат - что-то вроде:

Это всего лишь один простой сценарий, который поможет вам увидеть более простой подход к шаблону повторных операций.

На wiki-странице Polly есть гораздо больше информации с примерами некоторых других политик, с которыми она может вам помочь.

Попробуйте, у ребят даже есть подкаст!

Ссылки

Блог Мартина Фаулера о разработке программного обеспечения

Дорожная карта Polly