在多线程应用程序中使用Thread.Sleep的原因是什么?

Joa*_*nge 3 .net c# parallel-processing multithreading sleep

很多时候,当我看到一些多线程代码时,我会看到Thread.Sleep()代码中的语句.

我甚至遇到了崩溃,我试图弄清楚问题所在,所以大部分的多线程代码都被注释掉了,慢慢地把它带到最后一块,当我添加一个for语句时:

for ( int i = 0; i < 1000000; ++i )
    ++i;
Run Code Online (Sandbox Code Playgroud)

它并没有崩溃.所以现在我更换Thread.Sleep()它似乎工作.我不能轻易地重新发布它在这里发布,但是Thread.Sleep()对于多线程应用程序是必要的吗?

他们的目的是什么?如果不使用它会导致意想不到的结果吗?

编辑:顺便说一下,我正在使用BackgroundWorker并且只在那里实现我的东西,但不确定是什么原因造成的.虽然我使用的API是托管应用程序,其中应用程序不是多线程的.所以例如我认为我不能同时在几个线程上调用它的API函数.不确定,但那是我的猜测.

Ree*_*sey 6

通常情况下,这Thread.Sleep是一个糟糕设计的标志.话虽这么说,它比吃100%的CPU核心时间要好得多,这就是上面的for循环所做的.

更好的选择通常是使用a WaitHandle(例如a)ManualResetEvent在"事件"(这是延迟的原因)发生时触发线程执行的继续.或者,Timer在许多情况下使用a 也可以工作.