有没有人对什么是最好的实现锁定的方法有任何想法,以便在X秒后自动释放?
答案 0 :(得分:3)
假设您正在寻找在X秒内触发的事件,那么我认为没有任何核心Mutex对象,它目前提供您正在寻找的功能类型。
您可以使用System.Timer(在X秒内触发并释放锁定的互斥锁)或使用睡眠时间为X秒的线程创建此类功能 - 我更喜欢第一种方法。
但是,这两个都将安排在用户/应用程序层中 - 因此您必须等待它们被安排。
答案 1 :(得分:2)
您可以使用Monitor.TryEnter
来实现此目的。请参考下面 -
Synchronization problems with Monitor class in WCF service
if(Monitor.TryEnter(lockObj, timeout)) {
try {
...
} finally {
Monitor.Exit(lockObj);
}
}
答案 2 :(得分:0)
答案 3 :(得分:0)
您可以将TransactionScope与TransactionOptions超时参数一起使用。
using (TransactionScope tx = new TransactionScope(TransactionScopeOption.RequiresNew,
new TransactionOptions() { Timeout = new TimeSpan(0, 0, 10) }))
时间结束后,您将收到TransactionAbortedException,并且应该释放该锁。
会像这样:
lock(_lock)
{
try
{
using (TransactionScope tx = new TransactionScope(TransactionScopeOption.RequiresNew,
new TransactionOptions() { Timeout = new TimeSpan(0, 0, 10) }))
{
//do somenting important stuff
tx.Complete();
tx.Dispose(); // just remembering that will be disposed.
}
}
catch (TransactionAbortedException tex)
{
throw new Exception("Operation Timeout");
}
catch (Exception)
{
throw; // do whatever you want
}
}