我有一个控制台应用程序,我想在监听事件的同时一直保持打开状态。我已经测试了 Thread.Sleep(Timeout.Infinite);
和 while (true) { }
并且都允许在保持控制台应用程序打开的同时引发事件。有没有我应该优先使用的?如果线程正在休眠,是否有任何我不应该做的事情,例如修改类范围内声明的静态集合?
最佳答案
我建议使用 ManualResetEvent
(或其他 WaitHandle
),并调用 ManualResetEvent.WaitOne .
这将具有与永远 sleep 类似的效果,除了它为您提供了一种干净的方式,可以在需要时退出您的无限“ block ”(通过在事件上调用 Set()
)。
使用 while(true)
会消耗 CPU 周期,因此绝对要避免。
is there anything that I should not be doing, such as modifying a static collection declared in the scope of the class?
一般来说,不会。由于您的线程将被阻塞,因此使用共享数据不应该有任何同步问题(前提是集合中的项目没有特定要求,例如必须在具有适当同步上下文的线程上使用的用户界面元素.)
关于c# - 是 Thread.Sleep(Timeout.Infinite);比 while(true){} 更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13406435/