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
通知消費者線程數據已生產完畢。消費者線程在收到通知后繼續執行。