У меня есть класс с двумя методами (один экземпляр):
public class Example
{
public void Connect()
{
// do stuff
}
public void DoSomething()
{
if (someCondition)
Connect();
// do stuff
}
}
DoSomething
разрешено одновременно нескольким потокам.
Однако, если вызывается Connect
, никакой поток не может вводить DoSomething
и наоборот, поэтому Connect
и DoSomething
являются взаимоисключающими.
DoSomething
вызывается чаще, чем Connect
.
Моей первой идеей было использование ReaderWriterLockSlim
, однако, когда DomeSomething
получает блокировку считывателя и ему необходимо вызвать Connect
, он не может получить блокировку писателя в Connect
.
Какой шаблон синхронизации наиболее подходит для достижения этой цели?