我怀疑这是一个非常愚蠢的问题:C#中可中断锁语句的正确语法是什么?例如。得到锁;如果在锁定代码完成之前锁定被中断,则从封闭方法返回false。可能完全是错误的术语......谢谢。
答案 0 :(得分:2)
使用Monitor.TryEnter
查询锁定时,您可以暂停同样,在一个锁中你可以做Monitor.Wait
/ Monitor.Pulse
之类的事情暂时产生锁定,但你不能这样打断。
应用的主时间中断可能在Thread.Sleep中,可以通过Thread.Interrupt中断 - 但同样,这不会将控制权从执行的方法块中拉出来。
你想要实现的是什么?有了更多的背景,我们可以帮助更多...
答案 1 :(得分:1)
“中断”的意思不清楚。
异常中断
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
来中断这个。
“中断”
如果您是“打断”代码,那么它可能就像 同样,无论是否存在“中断”,锁都会自动释放。 因为其他人试图获取锁定而导致中断 这可能就是你要找的东西;在这种情况下,您可能需要使用其他内容,例如private bool SomeLockingMethod(object foo)
{
// Verify foo is valid
lock(foo)
{
// Do stuff
if(shouldInterrupt)
{
return false;
}
// Do more stuff
}
return true;
}
Semaphore
或ManualResetEvent
。
答案 2 :(得分:0)
我不确定你想要在这里得到什么。 lock
语句的目的是不应该中断,这样可以确保一致的行为。
你想在这里完成什么?
答案 3 :(得分:0)
您可能还要查看在2.0中添加的事务范围,这可能是您正在寻找的事项(由于您的问题含糊不清,因此未知)。它允许您尝试某些操作,然后在这些操作未正确完成时回滚。
See here了解详情。