DTLib/SafeMutex.cs

30 lines
692 B
C#

using System;
using System.Threading;
namespace DTLib
{
public class SafeMutex
{
readonly Mutex Mutex = new();
bool isReleased = false;
// тут выполняется отправленный код
public void Execute(Action action, out Exception exception)
{
try
{
exception = null;
Mutex.WaitOne();
action();
Mutex.ReleaseMutex();
isReleased = true;
}
catch (Exception ex)
{
exception = ex;
if (!isReleased) Mutex.ReleaseMutex();
}
}
}
}