у меня есть одноэлементный класс (MySingletonClass), который имеет три основных метода
- BeginTransaction (clientId)
- AddItem (item, clientId)
- CommitTransaction (clientId )
ClientClass:
public class ClientClass
{
private string id;
private MySingletonClass s = MySingletonClass.Instance;
public ClientClass()
{
id = new Guid().ToString();
}
public void BeginTransaction()
{
//start a lock here
s.BeginTransaction(id);
}
public void CommitTransaction()
{
s.CommitTransaction(id);
//end lock here
}
public void AddItem(string item)
{
//no access until lock is released
s.AddItem(item, id);
}
}
Существует множество задач, каждая из которых со своим собственным классом ClientClass
Мне нужен способ сериализации доступа к singleton класс за транзакцией: если транзакция не была зафиксирована, то никакой другой поток не должен запускать новую транзакцию или вызывать какой-либо другой метод в экземпляре синглтона
Например, каждая задача может иметь такой код
Task.Factory.StartNew(() =>
{
Client c = new ClientClass();
c.BeginTransaction();
c.AddItem("www");
c.AddItem("qqq");
c.CommitTransaction();
});
Task.Factory.StartNew(() =>
{
Client c1 = new ClientClass();
c1.BeginTransaction();
c1.AddItem("aaa");
c1.CommitTransaction();
});
Любая идея, как я могу архивировать это с какой-то блокировкой, которая запускается при начальной транзакции и освобождается при фиксации? Все примеры запуска монитора, мьютекса и блокировки, которые я видел, выпущены одним и тем же способом. Есть ли блокировка нескольких методов ??