Политики тайм-аутов и резервных вариантов
Ограничивайте время ожидания и обеспечивайте корректные резервные варианты.
«Политики тайм-аутов и резервных вариантов» — бесплатный урок C# Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.
Почему важны ограничения времени ожидания
Вызов, который никогда не возвращает результат, хуже вызова, завершающегося ошибкой: он занимает потоки и соединения. Стратегия ограничения времени ожидания задаёт максимальную длительность выполнения операции, после которой Polly отменяет её.
Добавление ограничения времени ожидания
Polly v8 предоставляет AddTimeout. При превышении установленного предела выбрасывается TimeoutRejectedException и отменяется лежащий в основе токен.
using Polly.Timeout;
var pipeline = new ResiliencePipelineBuilder()
.AddTimeout(TimeSpan.FromSeconds(3))
.Build();Кооперативная отмена
Ограничение времени ожидания работает, отменяя CancellationToken, переданный вашей функции обратного вызова. Ваш код должен учитывать этот токен, чтобы ограничение времени ожидания срабатывало без задержки.
await pipeline.ExecuteAsync(async token =>
{
// token is cancelled when the timeout fires
await httpClient.GetAsync(url, token);
});Реакция на превышение времени ожидания
Используйте TimeoutStrategyOptions с функцией обратного вызова OnTimeout, чтобы записывать в журнал или отправлять метрики, когда выполнение операции принудительно прерывается.
new TimeoutStrategyOptions
{
Timeout = TimeSpan.FromSeconds(3),
OnTimeout = args =>
{
Console.WriteLine($"Timed out after {args.Timeout}");
return default;
}
};Что такое резервный вариант
Резервный вариант предоставляет заменяющий результат, если операция завершается ошибкой, поэтому пользователь получает корректный режим с ограниченной функциональностью вместо ошибки: кэшированные данные, значение по умолчанию или понятное сообщение.
Добавление стратегии резервного варианта
AddFallback требует типизированного конвейера. Вы задаёте, какие ошибки нужно обрабатывать и какое значение возвращать вместо исходного.
using Polly.Fallback;
var pipeline = new ResiliencePipelineBuilder<string>()
.AddFallback(new FallbackStrategyOptions<string>
{
ShouldHandle = new PredicateBuilder<string>()
.Handle<HttpRequestException>(),
FallbackAction = args =>
Outcome.FromResultAsValueTask("cached default")
})
.Build();Возврат кэшированных данных в качестве резервного варианта
Распространённый подход — возвращать последнее достоверно полученное значение из кэша, если прямой вызов завершается ошибкой, чтобы приложение сохраняло отзывчивость.
FallbackAction = args =>
{
var cached = _cache.GetLastKnownGood();
return Outcome.FromResultAsValueTask(cached);
}Наблюдение за резервными вариантами
Функция обратного вызова OnFallback срабатывает при использовании резервного варианта и идеально подходит для записи в журнал информации о переходе по пути с ограниченной функциональностью.
new FallbackStrategyOptions<string>
{
FallbackAction = args => Outcome.FromResultAsValueTask("default"),
OnFallback = args =>
{
Console.WriteLine("Fallback executed");
return default;
}
};Ограничение времени ожидания и резервный вариант вместе
Их объединение даёт мощный результат: ограничение времени ожидания ограничивает длительность ожидания, а резервный вариант предоставляет значение при превышении времени ожидания или возникновении любой другой обрабатываемой ошибки, поэтому вызывающая сторона никогда не зависает и не завершается аварийно.
Выбор разумных ограничений времени ожидания
Устанавливайте ограничения времени ожидания на основе реалистичной задержки и запаса, а не произвольно выбирайте слишком маленькие значения. Слишком жёсткое ограничение приводит к ошибкам даже в исправных вызовах, а слишком мягкое лишает это ограничение смысла.
Резервный вариант — крайняя мера
Размещайте резервный вариант как самую внешнюю стратегию, чтобы он мог перехватывать ошибки повторных попыток, автоматического выключателя и ограничений времени ожидания, гарантируя вызывающей стороне всегда пригодный результат.
Быстрая проверка
Проверьте стратегии ограничения времени ожидания и резервного варианта.
Итоги
Ограничения времени ожидания ограничивают длительность операции с помощью AddTimeout, отменяя токен и выбрасывая TimeoutRejectedException (не забывайте учитывать токен!). Резервные варианты возвращают заменяющие результаты через AddFallback с помощью FallbackAction, часто предоставляя кэшированные данные. Вместе они сохраняют отзывчивость приложений: ограничивают ожидание, а затем обеспечивают корректный переход в режим с ограниченной функциональностью. Размещайте резервный вариант внешним, чтобы он перехватывал все обрабатываемые ошибки.
Изучай C# с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 93
- Уроки
- 346
Часто задаваемые вопросы
Урок «Политики тайм-аутов и резервных вариантов» бесплатный?
Да — полный текст урока «Политики тайм-аутов и резервных вариантов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.
Чему я научусь в уроке «Политики тайм-аутов и резервных вариантов»?
Ограничивайте время ожидания и обеспечивайте корректные резервные варианты. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C# Academy?
Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Политики тайм-аутов и резервных вариантов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C# Academy?
Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Политики повторных попыток
- Шаблон автоматического размыкателя
- Политики тайм-аутов и резервных вариантов
- Конвейеры отказоустойчивости