题
我怀疑这是一个非常愚蠢的问题:C#中可中断锁语句的正确语法是什么?例如。得到锁;如果在锁定代码完成之前锁定被中断,则从封闭方法返回false。可能完全是错误的术语......谢谢。
解决方案
使用 Monitor.TryEnter
; 获取锁定时,您可以暂停同样,在一个锁中你可以做一些事情,比如 Monitor.Wait
/ Monitor.Pulse
来临时产生锁,但不能这样打断。
应用的主时间中断可能在Thread.Sleep中,可以通过Thread.Interrupt中断 - 但同样,这不会将控制权从执行的方法块中拉出来。
你想要实现的是什么?有了更多的背景,我们可以帮助更多...
其他提示
你所说的“中断”是什么意思目前还不清楚。
异常中断
private bool SomeLockingMethod(object foo)
{
// Verify foo is valid
try
{
lock(foo)
{
while(something)
{
// Do stuff
Thread.Sleep(1); // Possibly yield to another
// thread calling Thread.Interrupt
}
}
return true;
}
catch(ThreadInterruptedException ex)
{
// Handle exception
}
return false;
}
如果未达到 return true
,则在保持 foo
上的锁定时发生了某些事情,并且代码返回 false
。无论如何,锁都会自动释放。
另一个线程可以通过调用 <来中断这个线程。代码>了Thread.interrupt 代码> 。
<强>&QUOT;中断&QUOT;来自代码
如果你是那个“打断”的人代码,它可以像
一样简单private bool SomeLockingMethod(object foo)
{
// Verify foo is valid
lock(foo)
{
// Do stuff
if(shouldInterrupt)
{
return false;
}
// Do more stuff
}
return true;
}
同样,无论是否存在“中断”,锁都会自动释放。
因为其他人试图获取锁定而导致中断
这可能就是你要找的东西;在这种情况下,您可能想要使用其他内容,例如 <代码>信号量 或 ManualResetEvent的代码>
。
我不确定你想要在这里得到什么。 lock
语句的目的是不应该中断,这样可以确保一致的行为。
你想在这里完成什么?
您可能还要查看在2.0中添加的事务范围,这可能是您正在寻找的事项(由于您的问题含糊不清,因此未知)。它允许您尝试某些操作,然后在这些操作未正确完成时回滚。
请点击此处了解更多详情。