信号 Signaling
- 有时,你需要让某线程一直处于等待的状态,直至接受到其它线程发来的通知。这就叫做signaling(发送信号)。
- 最简单的信号结构就是ManualResetEvent。
- 调用它上面的WaitOne方法会阻塞当前的线程,直到另一个线程通过调用Set方法来开启信号。 ```csharp using System; using System.Threading;
namespace ThreadTest { class Program { static void Main(string[] args) { var signal = new ManualResetEvent(false);
new Thread(() =>
{
Console.WriteLine("Waiting for signal ...");
signal.WaitOne(); //阻塞当前线程 通过Set()开启
signal.Dispose();
Console.WriteLine("Got signal!");
}).Start();
Thread.Sleep(3000);
signal.Set(); // 打开了信号
}
}
} ```
- 调用完Set之后,信号会处于“打开”的状态。可以通过Reset方法将其再次关闭。