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内部细节的绝妙书籍,如果我们正在研究更复杂的内容。