我有一个游戏对象,它包含一个类A(扩展单行为),它包含(创建)一个类B(无单行为)。 这个类B产生了一个包含while(true)循环的线程,这个线程做了一些工作。
我的问题是...
当这个GameObject被disposeddestroyed时,我假设它里面包含的B类也被销毁了。当这个类B被销毁时,这个无限循环线程是否也被终止?
已经启动的线程,主要是运行到主线程结束。这是一个操作系统级别的后备,以避免没有自己的应用程序的僵尸线程。然而,这不是一个你应该依赖的后备机制。一个线程一旦启动,就应该被看作是一个非管理资源,所以应该有清理代码。尤其是Dispose模式。
有这样一个 奇妙的文章,如何做到这一点但我觉得需要解释一下。一般来说,你必须用Dispose模式区分两种情况。
95%的类只实现了IDisposeable,因为情况2。我们不知道是否真的有什么Disposeable,或者那只是抽象基类的一部分。
线程没有实现Dispose 我不知道为什么),所以你得到了一个罕见的情况1。Dispose和Finalizer通常也会被压缩成一个方法--通常是Dispose那个--因为它们的代码非常相似。Finalize和Dispose之间唯一真正的区别是级联行为。
我最后的建议是,既然你是在多线程下工作,你就必须注意不要吞下Exceptions。通常情况下,你必须写出非常糟糕的代码来吞噬Exceptions,但是在多任务处理的情况下,你必须用你的方式来解决以下问题 不 吞下任何。我找不到任何迹象表明Thread有一个内置的机制来持久化异常(我知道事实上Task有)。我只能给你两篇我经常链接的关于异常处理的文章。