Лучшая практика для обрабатывания исключения, которое выдается в блоке выгоды в потоке. (.NET)

Метод TryParse для каждого типа примитива является замечательным при проверке ввода данных пользователем.

double doubleValue
if (!Double.TryParse(myDataRow("myColumn"), out doubleValue))
{
    // set validation error
}
5
задан John Saunders 21 July 2009 в 19:00
поделиться

5 ответов

Каково ваше мнение об обработке исключений при выполнении потока?

Вы должны обрабатывать исключения всякий раз, когда это возможно и когда вы ожидаете исключения. Уточнение: я полностью согласен с Джоном в том, что вы не должны обрабатывать исключения везде - только там, где вы можете что-то с ними сделать. Однако вы никогда не должны позволять исключению не обрабатываться в потоке, поскольку это вызовет серьезные проблемы. Имейте корневой обработчик исключений и позвольте вашему потоку изящно завершиться (после регистрации проблемы и т. Д.)

Более конкретно, что, если поток будет брошен внутри блока catch в предложении try-catch?

Вы имели в виду: Что делать, если исключение возникает в блоке catch? Что ж, тогда это не обрабатывается текущим блоком try-catch. Лучше не помещать слишком много обработки в блок catch, чтобы максимально избежать этой ситуации.

А что произойдет с потоком, если этот поток не обрабатывается?

Вы имели в виду: Что происходит с потоком если исключение необработанное? Он умирает. вызывает исключение UnhandledException в AppDomain потока. Вы можете наблюдать за для них добавлен обработчик событий:

 AppDomain.CurrentDomain.UnhandledException + = CurrentDomain_UnhandledException;
7
ответ дан 18 December 2019 в 07:56
поделиться

Я не согласен с Реном или, по крайней мере, с тем, что он имел в виду.

Обрабатывать исключения, только если вы действительно можете их обрабатывать . Только если вы можете что-то сделать с тем, что пошло не так, или добавить информацию. Не трогайте их только потому, что можете.

try {
    // ..
} catch (Exception ex) {
    Console.WriteLine(ex.Message);
}

Вышесказанное очень плохо. Во-первых, вы отображаете не все исключение, а только сообщение. Во-вторых, вы позволяете всему продолжаться и не знаете, в каком состоянии находится процесс.

8
ответ дан 18 December 2019 в 07:56
поделиться

Неперехваченное исключение в потоке вызывает UnhandledException в AppDomain потока. Вы можете следить за ними, добавляя обработчик событий:

AppDomain.CurrentDomain.UnhandledException + = CurrentDomain_UnhandledException;

4
ответ дан 18 December 2019 в 07:56
поделиться

Необработанные исключения в потоке приводят к тому, что ваш процесс умирает и умирает с бесполезным сообщением в вашем журнале событий.

Наличие обработчиков исключений верхнего уровня в каждом потоке, который регистрирует (и, возможно, повторно- throw) является хорошей практикой, как и установка обработчика исключений appdomain, о чем упоминается в других ответах.

1
ответ дан 18 December 2019 в 07:56
поделиться

If you think you can handle an exception, you should catch it. All other exceptions that can not be dealt with should bubble up to the surface of the stack where if along the way no appropriate handler is found, will let the thread die.

You should not write any code in a catch block that could throw another exception, but if you need to you could nest another try catch block around it.

0
ответ дан 18 December 2019 в 07:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: