C#中是否有"尝试锁定,如果超时则跳过"操作?

时间:2020-03-05 18:39:06  来源:igfitidea点击:

我需要尝试锁定一个对象,如果它已经被锁定,则继续(超时后,或者没有它)继续。

Clock语句被阻止。

解决方案

回答

我相信我们可以使用Monitor.TryEnter()

lock语句只是转换为一个" Monitor.Enter()"调用和一个" try catch"块。

回答

Ed为我们提供了正确的功能。只是不要忘记调用Monitor.Exit()。我们应该使用try-finally块来保证适当的清理。

if (Monitor.TryEnter(someObject))
{
    try
    {
        // use object
    }
    finally
    {
        Monitor.Exit(someObject);
    }
}

回答

既然其他人都向我们指出了正确的方向,我们可能会自己发现这一点,但是TryEnter也可以使用超时参数。

杰夫·里希特(Jeff Richter)的" CLR via C#"是一本关于CLR内部细节的绝妙书籍,如果我们正在研究更复杂的内容。