using System; namespace Umbraco.Core { /// /// Provides an equivalent to the c# lock statement, to be used in a using block. /// /// Ie replace lock (o) {...} by using (new MonitorLock(o)) { ... } public class MonitorLock : IDisposable { private readonly object _locker; private readonly bool _entered; /// /// Initializes a new instance of the class with an object to lock. /// /// The object to lock. /// Should always be used within a using block. public MonitorLock(object locker) { _locker = locker; _entered = false; System.Threading.Monitor.Enter(_locker, ref _entered); } void IDisposable.Dispose() { if (_entered) System.Threading.Monitor.Exit(_locker); } } }