AutoResetEvent
是 C# 中的一个同步原语,它允许一个或多个线程等待,直到另一个线程触发事件。AutoResetEvent
在多种场景中都有应用,以下是一些常见的用途:
线程同步:
AutoResetEvent
。AutoResetEvent
通知消费者线程有新数据可读。资源池管理:
AutoResetEvent
可以用来控制资源的分配和释放。AutoResetEvent
通知等待的线程可以获取资源。异步编程:
AutoResetEvent
可以用来同步异步操作的结果。AutoResetEvent
来等待后台线程完成某些任务,然后更新 UI。倒计时或定时任务:
AutoResetEvent
可以用来实现倒计时或定时任务。AutoResetEvent
,当倒计时到达零时,触发一个事件或执行某些操作。信号量:
AutoResetEvent
本身不是信号量,但它可以用作信号量的一种实现方式。AutoResetEvent
上调用 Set()
方法来增加可用资源的计数,调用 WaitOne()
方法来减少计数并等待资源可用。以下是一个简单的 AutoResetEvent
示例:
using System;
using System.Threading;
class Program
{
static AutoResetEvent _event = new AutoResetEvent(false);
static void Main()
{
Thread producerThread = new Thread(Produce);
Thread consumerThread = new Thread(Consume);
producerThread.Start();
consumerThread.Start();
producerThread.Join();
consumerThread.Join();
}
static void Produce()
{
Console.WriteLine("生产者线程开始生产数据...");
Thread.Sleep(2000); // 模拟生产数据需要一些时间
Console.WriteLine("生产者线程生产完毕,通知消费者线程...");
_event.Set(); // 设置事件,表示数据已生产完毕
}
static void Consume()
{
Console.WriteLine("消费者线程开始等待数据...");
_event.WaitOne(); // 等待事件被设置
Console.WriteLine("消费者线程收到数据,继续执行...");
}
}
在这个示例中,生产者线程在 2 秒后通过 AutoResetEvent
通知消费者线程数据已生产完毕。消费者线程在收到通知后继续执行。