33 lines
693 B
C#

using System;
using System.Threading;
namespace AnotherReplayReader.Utils
{
internal class Lock : IDisposable
{
public readonly object LockObject;
private bool _disposed = false;
public Lock(object lockObject)
{
LockObject = lockObject;
Monitor.Enter(LockObject);
}
public void Dispose()
{
if (!_disposed)
{
Monitor.Exit(LockObject);
_disposed = true;
}
}
public static T Run<T>(object @lock, Func<T> action)
{
using var locker = new Lock(@lock);
return action();
}
}
}