Выбор ответа Middle Исключения обновлено

Исключения как управление потоком

Вопрос

Сервис валидирует 10 000 строк импорта в секунду, и примерно половина невалидна. Валидатор бросает ValidationException на каждую ошибку. Что не так?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Исключения дорогие: для ожидаемых ошибок лучше Result или Try... Бросок исключения заметно дороже обычного возврата: создаётся объект, собирается стек, идёт поиск обработчика и раскрутка.

Варианты ответа

  1. Исключения дорогие: для ожидаемых ошибок лучше Result или Try...правильный ответ
  2. Ничего: исключения в .NET почти бесплатны, если их ловить рядом
  3. Исключения нельзя бросать чаще одного раза в секунду на поток
  4. Надо бросать базовый Exception, а не свои типы: так быстрее

Разбор

Бросок исключения заметно дороже обычного возврата: создаётся объект, собирается стек, идёт поиск обработчика и раскрутка. Для ожидаемых, частых ошибок (валидация, парсинг) используют паттерн Try... или объект результата. Исключения оставляют для исключительных ситуаций. Тип исключения на скорость почти не влияет, ограничения частоты нет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.