以下のコードでは、Main関数は手動リセットイベント(mre)が設定されるのを待ちます。ただし、待機が開始される前に、同期オブジェクトは他のスレッドによってすでにシグナル状態に設定されています。
それで、「すでにシグナリングされた同期オブジェクト」を待つのは安全ですか?
class Program
{
static void Main(string[] args)
{
ManualResetEvent mre = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(new WaitCallback(Func), mre);
Thread.Sleep(1500);
mre.WaitOne(100000); // Waiting for already signaled object
Console.WriteLine("Wait Completed");
}
public static void Func(object state)
{
ManualResetEvent mre = (ManualResetEvent)state;
mre.Set();
Console.WriteLine("Mre Is Set");
}
}