Каким будет асинхронный (ожидаемый) эквивалент AutoResetEvent?
Если в классической синхронизации потоков мы будем использовать что-то вроде этого:
AutoResetEvent signal = new AutoResetEvent(false);
void Thread1Proc()
{
//do some stuff
//..
//..
signal.WaitOne(); //wait for an outer thread to signal we are good to continue
//do some more stuff
//..
//..
}
void Thread2Proc()
{
//do some stuff
//..
//..
signal.Set(); //signal the other thread it good to go
//do some more stuff
//..
//..
}
Я надеялся, что в новом асинхронном способе делать что-то вроде этого будет:
SomeAsyncAutoResetEvent asyncSignal = new SomeAsyncAutoResetEvent();
async void Task1Proc()
{
//do some stuff
//..
//..
await asyncSignal.WaitOne(); //wait for an outer thread to signal we are good to continue
//do some more stuff
//..
//..
}
async void Task2Proc()
{
//do some stuff
//..
//..
asyncSignal.Set(); //signal the other thread it good to go
//do some more stuff
//..
//..
}
Я видел другие решения, сделанные на заказ, но то, что мне удалось получить, в какой-то момент времени по-прежнему связано с блокировкой потока. Я не хочу этого только ради использования нового синтаксиса ожидания. Я ищу истинный механизм сигнализации, который не блокирует нить.
Я что-то не хватает в параллельной библиотеке задач?
EDIT: просто чтобы сделать ясно: SomeAsyncAutoResetEvent - это полностью созданное имя класса, используемое в качестве примера в моем примере.