ManualResetEvent
是 C# 中一种同步原语,它用于在异步编程中控制多个线程之间的执行顺序和协作。它允许一个或多个线程等待其他线程完成操作。ManualResetEvent
的主要作用是提供线程间的同步和通信机制。
在异步编程中,ManualResetEvent
的作用如下:
-
等待其他线程完成操作:当一个线程需要等待另一个线程完成特定任务时,可以使用
ManualResetEvent
的WaitOne()
方法。这将导致当前线程阻塞,直到其他线程调用ManualResetEvent
的Set()
方法来触发事件。 -
通知其他线程已完成操作:当线程完成任务后,需要通知其他等待的线程。这可以通过调用
ManualResetEvent
的Set()
方法来实现。一旦其他线程调用了WaitOne()
方法,它们将不再阻塞,并继续执行。 -
允许多个线程同时运行:
ManualResetEvent
的初始状态是未设置(signaled),这意味着当一个线程调用WaitOne()
方法时,它会立即返回,而不是阻塞。这使得多个线程可以同时运行,直到它们需要等待某个事件发生。
下面是一个简单的示例,展示了如何在异步编程中使用 ManualResetEvent
:
在这个示例中,我们创建了两个异步任务 task1
和 task2
,它们都调用 DoWork
方法。DoWork
方法首先等待手动重置事件 _event
,然后执行任务代码,最后设置事件以通知其他任务已完成。通过使用 ManualResetEvent
,我们可以确保两个任务按顺序执行,即使它们是异步的。