引言
在多线程编程中,线程控制是核心挑战之一。C# 提供了 Sleep()
和 Wait()
两种看似相似但本质迥异的线程控制机制。许多开发者对它们的区别和使用场景存在困惑。本文将全面剖析这两种机制,从底层原理到实际应用,通过丰富的代码示例、性能对比和时序图表,带您彻底掌握线程控制的精髓。
一、基础概念解析
1.1 Thread.Sleep() 的本质
Thread.Sleep()
是一个静态方法,使当前线程暂停执行指定的时间:
Thread.Sleep(1000); // 当前线程休眠1秒
关键特性:
- 不释放任何锁资源
- 休眠时间不精确(最小约15ms)
- 会触发线程上下文切换
1.2 Wait() 机制的多样性
C# 中有多种 Wait 机制:
- Monitor.Wait() (与 lock 配合使用)
- ManualResetEvent/WaitHandle.WaitOne()
- Task.Wait()
- async/await 的隐式等待
本文主要对比 Monitor.Wait()
与 Thread.Sleep()
。