代码之家  ›  专栏  ›  技术社区  ›  MartyIX

如何正确处理螺纹干涉异常?

  •  7
  • MartyIX  · 技术社区  · 15 年前
    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);
        }
    }
    

    方法 线程方法 运行通过 系统.线程.线程 . 因此,只要出现异常,线程就可能中断。 螺纹中断例外 可能会被扔进最后一个街区,对吧?我是否必须最终将块封闭在try catch中?

    谢谢!

    1 回复  |  直到 9 年前
        1
  •  7
  •   Joshua    15 年前

    当线程被手动调用中断时,引发线程中断异常。 Thread.Interrupt . Windows本身不会使用该方法中断线程。通常情况下,它将是您的程序控制线程何时发送中断信号(不是所有时间)。由于中断信号可用于某些流量控制,因此通常不会连续快速发送两次。

    threadinterruptedException在被中断的线程中抛出,但直到线程阻塞。如果线程从不阻塞,则不会抛出异常,因此线程可能在不被中断的情况下完成。

    如果线程从不在其他对象上休眠或等待(进入WaitSleepJoin状态),则不会看到抛出的异常。

    保护好你的线是可以接受的。不要忘记,线程异常也可以被抛出,而且这些异常更普遍,而且可以更频繁地抛出(应用程序正在关闭等)。