Как правильно обрабатывать 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 запускается через

1 ответов


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

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

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

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