В некоторых случаях уместно поймать исключение и ничего не делать. Например, при вызове Control.BeginInvoke для запроса на обновление самого элемента управления индикатора выполнения, возникает неизбежное (*) состояние гонки, если какой-то другой поток может располагать элементом управления. Хотя, возможно, следует отлавливать только те исключения, которые можно ожидать от BeginInvoke, существует философский аргумент, который гласит, что любые условия, которые могут вызвать BeginInvoke, могут представлять интерес для потока пользовательского интерфейса, но на самом деле не представляют интереса для работника. поток, который пытается предоставить уведомление об обновлении вежливости. Все исключения из BeginInvoke, которые система разрешает перехватывать, не должны влиять на рабочий поток, а те, которые не могут быть перехвачены, не будут перехвачены. На самом деле нет никаких причин, по которым исключения, связанные с пользовательским интерфейсом, должны выходить из подпрограммы, целью которой не является обновление пользовательского интерфейса, а вместо этого предполагается выполнение бизнес-логики (с обновлениями индикатора выполнения как побочным эффектом вежливости).
Все это, как говорится, 300 раз звучит как слишком много для паттерна Try-Catch-Ignore. Если их много, например Операторы BeginInvoke, заключенные в такие блоки catch, должны быть извлечены в другую подпрограмму TryBeginInvoke. Аналогично, если есть много вызовов какой-либо другой функции, которая возвращает исключение «ничего не делать». Хотя я могу представить, что всего может быть 300 обращений к нескольким функциям, которые возвращают такие неприятные исключения, я сомневаюсь, что есть 300 таких функций.
(*) Можно было бы использовать блокировки для защиты методов BeginInvoke и Dispose, но это добавляет значительную сложность и создает дополнительные возможности для того, чтобы что-то пошло не так. Если бы существовал метод .net TryBeginInvoke, это было бы прекрасно. Так как он не существует, написание такой подпрограммы для переноса BeginInvoke с блоком Try-Catch-Ignore кажется наилучшим подходом.