线程没有结束,异常导致这种情况?

时间:2014-08-18 09:48:45

标签: c# multithreading

我正在启动多个执行不同操作的线程。 线程都有一个“endme”布尔变量。现在,当我尝试通过设置该变量来结束线程然后结束调试器时,它会尖叫它无法结束所有进程。

调试了一下后,我发现当相应地设置“end me”变量时,进程进入其代码的“结束”部分。但随后会发生异常并被抛出。

现在我的问题是:异常是否导致线程无法再结束?

1 个答案:

答案 0 :(得分:1)

将我的评论提升为答案,因为它是正确的,甚至可能是相关的。

在没有任何代码重现问题的情况下,我会注意到如果你通过设置一个布尔变量" endMe"来在线程之间进行通信,那么你需要使用volatile readswrites访问该变量,例如(在.Net 4.5中):

public class ThreadedWorker
{
    bool endMe = false;

    public bool EndSignalled { get { return Volatile.Read(ref endMe); } }

    public void SignalEnd()
    {
        Volatile.Write(ref isEnded, true);
    }
}

或者在所有c#版本中,您都可以使用volatile keyword

public class ThreadedWorker
{
    volatile bool endMe = false;

    public bool EndSignalled { get { return endMe; } }

    public void SignalEnd()
    {
        endMe = true;
    }
}