在C#中,ManualResetEvent
類沒有內置的超時功能。但是,您可以使用 ManualResetEventSlim
類來實現這個需求。ManualResetEventSlim
類有一個名為 WaitAsync
的方法,它允許您指定一個超時時間。以下是一個示例:
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
// 創建一個 ManualResetEventSlim 實例
var resetEvent = new ManualResetEventSlim();
// 啟動一個任務來模擬一些操作
Task task = Task.Run(() =>
{
Thread.Sleep(3000); // 模擬耗時操作
Console.WriteLine("操作完成");
resetEvent.Set(); // 設置事件,以便主線程可以繼續執行
});
// 嘗試等待操作完成,但最多等待3秒
bool isOperationCompleted = await resetEvent.WaitAsync(TimeSpan.FromSeconds(3));
if (isOperationCompleted)
{
Console.WriteLine("操作在超時時間內完成");
}
else
{
Console.WriteLine("操作超時");
}
// 等待任務完成
await task;
}
}
在這個示例中,我們創建了一個 ManualResetEventSlim
實例,然后啟動了一個任務來模擬一些耗時操作。我們使用 WaitAsync
方法等待操作完成,同時設置了一個3秒的超時時間。如果操作在超時時間內完成,我們將看到 “操作在超時時間內完成” 的輸出;否則,我們將看到 “操作超時” 的輸出。