Как правильно обработать ThreadInterruptedException?

public void threadMethod() 
{
    try
    {
        // do something
    }    
    catch (ThreadInterruptedException e)
    {
        Console.WriteLine("[Net]", role, "Thread interrupted.");
        n.CloseConnection();
    }
    finally
    {
        if (isAutenticated == false)
        {
            n.CloseConnection();
        }

        Dispatcher.Invoke(addMessage, "Network connection searching was disabled.");
        DebuggerIX.WriteLine("[Net]", role, "Finished");
        Dispatcher.Invoke(threadStoppedDel);
    }
}

Метод threadMethod выполняется через Систему. Поточная обработка. Поток. Поток может быть прерван каждый раз, когда поэтому исключение ThreadInterruptedException может быть добавлено наконец блок, правильно? Я должен включить блок в наконец в выгоде попытки снова?

Спасибо!

7
задан Nathan Baulch 22 November 2016 в 03:25
поделиться

1 ответ

Исключение прерывания потока создается, когда поток прерывается путем ручного вызова Thread.Interrupt . Сама Windows не будет прерывать ваш поток с помощью этого метода. Как правило, ваша программа будет контролировать, когда поток отправляет сигнал прерывания (не всегда). Поскольку сигнал прерывания может использоваться для некоторого управления потоком, он обычно не отправляется дважды в быстрой последовательности.

ThreadInterruptedException создается в прерванном потоке, но не раньше, чем поток блокируется. Если поток никогда не блокируется, исключение никогда не создается, и, таким образом, поток может завершиться без прерывания.

Если ваш поток никогда не засыпает и не ожидает других объектов (переходя в состояние WaitSleepJoin), вы никогда не увидите сгенерированного исключения.

Защита вашей нити должна быть приемлемой. Не забывайте, что исключение ThreadAbortException также может быть выброшено, и оно немного более распространено и может генерироваться чаще (приложение завершает работу и т. Д.).

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

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