Исключение, сгенерированное одним потоком, не приведет к отказу в работе другого потока. Пример Threadlsolation демонстрирует это.
_gc class tm
// класс сборщика мусора tm
{
public:
void m() {
Console::WriteLine(
"Thread {0} started", // "Поток {0} начал
работу",
Программа генерирует следующую выдачу. Обращаем внимание читателя на то, что второй поток может продолжать выводить числа даже тогда, когда первый поток прерывается в результате появления необрабатываемого исключения. И, кроме того, может закончиться главный поток, породивший другие два потока, причем это тоже не приведет к завершению этих двух потоков.
Thread 2 starting new threads.
Thread 2 done.
Thread 5 started
Thread 6 started
Unhandled Exception: System.Exception:
Thread Exception at te.tue() in
c:\oi\netcpp\chap8\threadisolation\
threadisolation.h:line 32 0
1
2
3
4
5
6
7
8
9
Thread 5 done
Перевод такой:
Поток 2 запускает новые потоки. Поток 2 работу закончил.
Поток 5 стартовал Поток 6 стартовал
Необработанное Исключение:
Система.Исключение: Исключение Потока в te.tue () в
c:\oi\netcpp\chap8\threadisolation\
threadisolation.h:line 32 О
1
2
3
4
5
6
7
8
9
Поток 5 работу закончил
Класс AppDomain (Прикладная область) (обсуждаемый в данной главе позже) позволяет устанавливать обработчик для перехвата исключения UnhandledException.