"while(true)"通常用于永久线程吗?

Cor*_*rey 14 c# multithreading

我对编码比较陌生; 我的大多数"工作"都只是简单的GUI应用程序,它只能用于一件事,所以我没有必要进行多少操作.

无论如何,我想知道线程的一件事是,如果你想让一个线程永远活着去做它正在做的任何工作(处理,等待输入,等等),那么格式化它是正常的:

while (true) {
    // do stuff
    Thread.Sleep(1000);
}
Run Code Online (Sandbox Code Playgroud)

(或类似的规定)...?或者这是不安全的,如果可能的话应该避免吗?

Noo*_*ilk 24

是的,那就是你做的.

但通常它就像:

bool keepRunning = true;

...

while(keepRunning){
}
Run Code Online (Sandbox Code Playgroud)

因为有时候你可能想让别人/别的东西有能力阻止你.

  • Thread.Abort很好,但它会导致异常,它可能会打断你关心完成的事情.使用'keepRunning'变量,它可以让你完成你正在做的任何优雅(虽然它不会导致*立即*完成). (8认同)
  • Thread.Abort没有问题.不要那样做. (4认同)
  • Abort有问题,因为它可能导致数据结构保持不稳定,并且由于线程正在释放它们,其他线程也可能变得不稳定.(假设他们在被处理时被锁定,因此在释放时不稳定).这就是为什么这个方法至少在Java中被弃用了. (3认同)
  • 也别忘了让keepRunning变得不稳定!(volatile bool keepRunning = true;) (3认同)