namespace Umbraco.Cms.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)) { ... } [Obsolete("Use System.Threading.Lock instead. This will be removed in Umbraco 16")] public class MonitorLock : IDisposable { private readonly bool _entered; private readonly object _locker; /// /// 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; Monitor.Enter(_locker, ref _entered); } void IDisposable.Dispose() { if (_entered) { Monitor.Exit(_locker); } } }