c#中的autoreseteevent . waitone()方法返回值

本文关键字:方法 返回值 waitone 中的 autoreseteevent | 更新日期: 2023-09-27 17:54:48

我有以下代码:

class Program
    {
        static AutoResetEvent objAuto = new AutoResetEvent(false);
        static void Main(string[] args)
        {
            ThreadPool.QueueUserWorkItem(new WaitCallback(SetState));
            Console.ReadLine();
            objAuto.Set();
        }
        static void SetState(object rsevent)
        {
            Console.WriteLine("Starting....");
            bool result = objAuto.WaitOne(10000); // 10 seconds
            Console.WriteLine("Finishing..." + result);
        }
    }

当我运行这段代码并在10秒内点击Enter时,我在result变量中获得true的值,否则是false

这个bool值在每个场景中表示什么…我还需要知道WaitOne的另一个过载的含义/使用,它有一个boolean参数,如下…

objAuto.WaitOne(10000,false)

第二个参数是exitContext这是什么这是什么样的context ?

c#中的autoreseteevent . waitone()方法返回值

返回值指示事件是否在指定的超时时间内发出信号。如果返回值为true,则事件已发出信号;如果为false,则表示超时。

exitContext的布尔参数表示是否释放调用该方法的同步上下文。在MSDN上查看更多信息。

exitContext参数没有作用,除非WaitOne方法是从非默认的托管上下文中调用的。如果您的线程位于对ContextBoundObject派生类的实例的调用中,则可能发生这种情况。即使你当前正在执行一个不是从ContextBoundObject派生的类上的方法,比如String,如果ContextBoundObject在当前应用程序域中的堆栈上,你也可以处于非默认上下文中。

当您的代码在非默认上下文中执行时,为exitContext指定true会导致线程在执行WaitOne方法之前退出非默认托管上下文中(即转换到默认上下文中)。在调用WaitOne方法完成后,线程返回到原始的非默认上下文。

如果它返回true则事件被触发,如果它返回false则方法结束,因为超时已达到,而不是因为事件被触发。