gpt4 book ai didi

c# - .NET 手动重置事件

转载 作者:太空狗 更新时间:2023-10-29 23:09:38 24 4
gpt4 key购买 nike

在下面的代码中,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");
}
}

最佳答案

是的。如果它已经发出信号,则不会有任何等待完成。没关系。

事实上,如果您查看 WaitOne(int) 的返回值,您会发现如果它已设置(或之前已设置),它会返回 true超时),如果未在您的超时值内设置,则为 false

这种区别有时很重要,因此请注意返回值。

关于c# - .NET 手动重置事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11013212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com