Это зависит от того, что делает поток, и от контекста потока в вашем приложении.Вообще говоря, вы должны следовать золотому правилу: не поймайте исключение, если вы не знаете, как его обработать .(Я, конечно, упрощаю, но это практическое правило).
Поскольку речь идет о System.Exception
, а не о каком-то подклассе, я предполагаю, что вы на самом деле не знаете, как обрабатывать исключение.Регистрация ошибки и разрешение завершению приложения (единственная законная причина перехватить исключение, которое вы не можете обработать) можно сделать без перехвата исключения из потока, который его вызвал, поэтому краткий ответ - нет, это не ОК .
Если я правильно помню, .NET 1 фактически перехватил и проглотил все исключения, возникшие в фоновых потоках.Это привело к тому, что в плохо написанных программах возникло так много проблем, что MS изменила поведение в .NET 2, чтобы исключить возможность сбоя приложения - и вы можете себе представить, что у них была очень веская причина для такого критического изменения.
Обновление, касающееся BackgroundWorker
:
Пожалуйста, не принимайте модель использования BackgroundWorker
за "глотание System.Exception
в порядке".Вот что говорят документы для BackgroundWorker.RunWorkerCompleted
:
Ваш обработчик событий RunWorkerCompleted должен всегда проверять свойства AsyncCompletedEventArgs.Error и AsyncCompletedEventArgs.Cancelled перед доступом к свойству RunWorkerCompletedEArgs.Если возникла исключительная ситуация или операция была отменена, доступ к свойству RunWorkerCompletedEventArgs.Result вызывает исключение.
Выбор игнорирования этого предложения или игнорирования возвращаемого значениянамеренно (в противном случае исключение все равно будет выброшено!), проще говоря, плохая практика программирования.