C# ManualResetEvent怎样实现超时机制

avatar
作者
筋斗云
阅读量:0

在C#中,ManualResetEvent 类用于同步多个线程,它有两种状态:SetReset。要实现超时机制,你可以结合使用 ManualResetEventTimer 类。下面是一个简单的示例,展示了如何使用 ManualResetEvent 实现超时机制:

using System; using System.Threading; using System.Threading.Tasks;  class Program {     static ManualResetEvent _event = new ManualResetEvent(false);     static DateTime _startTime;     static const int TimeoutMilliseconds = 5000; // 设置超时时间(毫秒)      static async Task Main(string[] args)     {         _startTime = DateTime.Now;          // 启动一个任务,该任务在指定的超时时间后取消等待         var timeoutTask = Task.Delay(TimeoutMilliseconds).ContinueWith(_ => _event.Set());          // 启动另一个任务,该任务等待手动重置事件         var waitTask = Task.Run(() =>         {             Console.WriteLine("等待事件...");             _event.WaitOne();             Console.WriteLine("事件已收到,继续执行...");         });          // 等待任务完成,如果超时则取消等待         var completedTask = await Task.WhenAny(waitTask, timeoutTask);          if (completedTask == timeoutTask)         {             Console.WriteLine("超时");         }         else         {             Console.WriteLine("任务完成");         }     } } 

在这个示例中,我们创建了两个任务:timeoutTaskwaitTasktimeoutTask 在指定的超时时间后设置 ManualResetEvent,而 waitTask 则等待 ManualResetEvent 被设置。我们使用 Task.WhenAny 方法等待这两个任务中的任何一个完成。如果 timeoutTask 完成(即超时),则取消 waitTask 的等待并输出 “超时”。否则,输出 “任务完成”。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!