我对何时使用它感到困惑..我知道所有这些方法都会产生线程阻塞。
那么他们的具体案例用途是什么。
还有什么是Wait()的首选技术..(仅限于ManualResetEvent?)
答案 0 :(得分:3)
睡眠:我不推荐使用它,除非它是一个后台线程,它可以进行持续轮询,因为它可以屏蔽竞争条件。为发送给它的参数的最小值产生时间片,在操作系统中对时间量进行计时,确定实际粒度(可能比您告诉它的时间更长)
等待:在.NET中,这是一个用于锁定的spinwait。它将处理器放入一个小循环(通常是2个指令),基本上是一个阻塞线程的睡眠,但继续执行产生其时间片的行为。或者可以是WaitOne,它等待WaitHandle接收信号。在这种情况下,线程等待为要接收的信号指定的时间量,然后解除阻塞,或者您可以永远等待,直到收到信号(可用于实现异步操作的超时,还有其他用途)
中断:中断处于等待,休眠或加入阻塞状态的线程。
加入:将线程加入当前上下文线程并在加入的线程完成后取消阻塞,用于等待完成所需的内容以继续
答案 1 :(得分:2)
LINQPad的作者Joseph Albahari以及Threading in C#的几个C#畅销书有一本优秀的免费电子书。如果你付出一些努力来处理这些材料,你的困惑应该消失......