背景
我正在尝试编写一个执行以下操作的应用程序:
SomeBlockingMethod
进行了一个方法调用。 SomeUnblockingMethod
。 SomeUnblockingMethod
被调用时,SomeBlockingMethod
内部的例程将继续。 请注意,我做的第一件事是调用
SomeBlockingMethod
,然后我将调用 SomeUnblockingMethod
。我正在考虑使用 Monitor.Wait/Monitor.Pulse
机制来实现这一点。唯一的事情是,当一个人调用 Monitor.Wait
时,除非所涉及的 object
已经被其他东西锁定(或者至少不是我所知道的),否则你不能一开始就阻塞......但是,我希望阻塞是我做的第一件事......所以这让我陷入了我的问题......问题
有什么方法可以实现
Monitor.Wait
以在调用 Monitor.Pulse
之前进行初始阻塞? 最佳答案
您可以改用 AutoResetEvent。
AutoResetEvent ar = new AutoResetEvent(false); // false set initial state as not signaled
然后,您可以使用
ar.WaitOne()
等待并使用 ar.Set()
向等待进程发出信号。当您想要保护资源或者您有 critical section 时,您应该使用 Monitor。如果你想要一个信号机制,那么
AutoResetEvent
或 ManualResetEvent
听起来是一个更好的选择。关于c# - Monitor.Wait 最初锁定?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36648270/