c# - 是 Thread.Sleep(Timeout.Infinite);比 while(true){} 更有效?

标签 c# console-application

我有一个控制台应用程序,我想在监听事件的同时一直保持打开状态。我已经测试了 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/

相关文章:

c# - Console.ReadLine else-if 语句中的意外行为

c++ - wcin 得到错误的字符输入?

C++ 编程练习——深度复制

c++ - 链接: fatal error LNK1561: entry point must be defined VS2015 developer cmd window

php - "X"参数不存在

c# - C# 中的 if(a==5) 或 if(5==a) 之间有什么区别吗?

C# - 如何将 10 个字节转换为 unsigned long

c# - 实体类对象改变了它的值,尽管它没有改变

c# - 在 LocalMachine 存储或 CurrentUser 存储中找不到证书 - 远程证书名称不匹配

c# - 在不破坏客户端代码的情况下将一个接口(interface)拆分为两个新接口(interface)?