33 lines
693 B
C#
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();
|
|
}
|
|
}
|
|
}
|