In .Net4, Monitor.Enter (Объект) помечен как устаревший:
[ObsoleteAttribute("This method does not allow its caller to reliably release the lock. Please use an overload with a lockTaken argument instead.")]
public static void Enter(
Object obj
)
И есть новый метод Monitor.Enter (lockObject, acquainLock) с этим использованием:
bool acquiredLock = false;
try
{
Monitor.Enter(lockObject, ref acquiredLock);
// Code that accesses resources that are protected by the lock.
}
finally
{
if (acquiredLock)
{
Monitor.Exit(lockObject);
}
}
Раньше я делал это так:
Monitor.Enter(lockObject);
try
{
// Code that accesses resources that are protected by the lock.
}
finally
{
Monitor.Exit(lockObject);
}
Это неправильно? Зачем ?
Может быть с прерыванием после ввода, но перед попыткой?
Как спросил Имон Нербонн: что произойдет, если в окончательном праве перед monitor.exit есть асинхронное исключение?
Ответ: ThreadAbortException
Когда возникает это исключение,
Runtime выполняет все, наконец,
блоки до окончания потока.