什么情况构成.Net中的非默认执行上下文?

时间:2010-06-22 17:04:15

标签: c# .net multithreading synchronization

WaitHandle.WaitOne()有一个ExitContext选项,允许在持有另一个资源锁之前临时释放资源锁。这在可能发生死锁或线程饥饿的某些情况下很有用。

msdn documentaiton谈论了一个非暴力背景。它们仅引用构成处于涉及ContexBoundObject的非默认上下文中的示例(Related Qusetion)。

其他同步选项如Monitor.Enter(),Lock {}语句是否也构成非默认上下文?还有哪些场景会将线程执行放在非默认上下文中?

1 个答案:

答案 0 :(得分:1)

这是一个棘手的主题,我对此并不了解。我所知道的是它与Remoting场景相关。通过传递True,您可以避免阻塞通信,直到等待解决并允许其他消息被分派。是的,避免死锁但可能导致同步问题。

WaitOne()的这个参数引起了很多混乱和FUD,.NET 2.0 SP1具有兼容性破坏性变化。他们添加了WaitOne(int)和WaitOne(TimeSpan)重载,以避免猜测exitContext参数的正确值。通常应该是假的。