WaitHandle.WaitOne()有一个ExitContext选项,允许在持有另一个资源锁之前临时释放资源锁。这在可能发生死锁或线程饥饿的某些情况下很有用。
msdn documentaiton谈论了一个非暴力背景。它们仅引用构成处于涉及ContexBoundObject的非默认上下文中的示例(Related Qusetion)。
其他同步选项如Monitor.Enter(),Lock {}语句是否也构成非默认上下文?还有哪些场景会将线程执行放在非默认上下文中?
答案 0 :(得分:1)
这是一个棘手的主题,我对此并不了解。我所知道的是它与Remoting场景相关。通过传递True,您可以避免阻塞通信,直到等待解决并允许其他消息被分派。是的,避免死锁但可能导致同步问题。
WaitOne()的这个参数引起了很多混乱和FUD,.NET 2.0 SP1具有兼容性破坏性变化。他们添加了WaitOne(int)和WaitOne(TimeSpan)重载,以避免猜测exitContext参数的正确值。通常应该是假的。