Net, переривання потоку

Іноді потік корисно перервати до його нормального завершення. Наприклад, отладчику може знадобитися перервати вийшов з-під контролю потік. Після переривання потік видаляється з системи і не може бути розпочато знову. Для переривання потоку до його нормального завершення служить метод Abort (). Нижче наведена найпростіша форма цього методу:

Метод Abort () створює необхідні умови для генерування винятку ThreadAbortException в тому потоці, для якого він був викликаний. Це виняток призводить до переривання потоку і може бути перехоплено і в коді-програми, але в цьому випадку воно автоматично генерується ще раз, щоб зупинити потік. Метод Abort () не завжди здатний зупинити потік негайно, тому якщо потік потрібно зупинити перед тим, як продовжити виконання програми, то після методу Abort () слід відразу ж викликати метод Join ().

Крім того, в найрідкісніших випадках методу Abort () взагалі не вдається зупинити потік. Це відбувається, наприклад, в тому випадку, якщо кодовий блок finally входить в нескінченний цикл. У наведеному нижче прикладі програми демонструється застосування методу Abort () для переривання потоку:

Метод Abort () не слід застосовувати в якості звичайного засобу переривання потоку, оскільки він призначений для особливих випадків. Зазвичай потік повинен завершуватися природним чином, щоб відбулося повернення з методу, що виконує роль точки входу в нього.

У деяких випадках виявляється корисною інша форма методу Abort (), наведена нижче в загальному вигляді:

де stateInfo позначає будь-яку інформацію, яку Ви бажаєте надіслати потоку, коли він зупиняється. Ця інформація доступна за допомогою властивості ExceptionState з класу винятку ThreadAbortException. Подібним чином потоку можна передати код завершення.

Виклик методу ResetAbort () може завершитися невдало, якщо в потоці відсутній належний режим надійної скасування передчасного переривання потоку. Давайте модифікуємо вищевказаний приклад:

Схожі статті