AutoResetEvent:C# 线程同步工具
AutoResetEvent:C# 线程同步工具
- 一、AutoResetEvent 是什么
-
- 核心特性:
- 官方文档:
- 适用场景
- 二、实战 Demo
- 三、核心方法速查表
- 四、避坑指南
- 总结
AutoResetEvent:C# 线程同步工具
多线程编程中,线程间的协同往往是绕不开的话题。C#中常使用 AutoResetEvent
来协调同一进程内线程的同步工作
一、AutoResetEvent 是什么
AutoResetEvent
是.NET 提供的线程同步原语,基于 EventWaitHandle
实现,核心作用是协调同一进程内多个线程的执行时机。可以通过两种状态控制线程的阻塞与唤醒:
- 终止状态(Signaled):允许等待的线程继续执行
- 非终止状态(Non-Signaled):阻塞等待的线程
核心特性:
- 进程内生效:仅支持同一进程内的线程同步,跨进程同步需使用
EventWaitHandle
- 自动重置:释放一个等待线程后,会自动从 “终止状态” 切回 “非终止状态”
- 单线程唤醒:一次信号只能唤醒一个等待线程,这是它与
ManualResetEvent
的关键区别
官方文档:
- ManualResetEvent:ManualResetEvent
- AutoResetEvent:AutoResetEvent
- EventWaitHandle:EventWaitHandle
适用场景
- 生产者 - 消费者模型:生产者线程生成数据后,发信号让一个消费者线程处理,避免多个消费者抢同一批数据
- 顺序化任务调度:主线程分配任务后,等待子线程完成一个任务,再分配下一个,保证任务按顺序执行
- 异步操作通知:当某个异步操作完成后,通知后续线程执行
二、实战 Demo
- 下面的例子模拟了 “主线程准备数据→通知工作线程执行” 的场景,展示了 AutoResetEvent 的核心用法:
using System;
using System.Threading;
using System.Threading.Tasks