Quale sarebbe l'equivalente asincrono (attendibile) di AutoResetEvent?Awaitable AutoResetEvent
Se nella sincronizzazione dei thread classica vorremmo usare qualcosa di simile:
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's good to go
//do some more stuff
//..
//..
}
Speravo che nel nuovo modo asincrono di fare le cose, qualcosa di simile sarebbe venuto per essere:
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's good to go
//do some more stuff
//..
//..
}
Ho visto altre soluzioni su misura, ma quello che sono riuscito a mettere le mani su, ad un certo punto nel tempo, implica ancora il blocco di un thread. Non voglio questo solo per il gusto di usare la nuova sintassi di attesa. Sto cercando un meccanismo di segnalazione vero e attendibile che non blocchi alcun thread.
È qualcosa che mi manca nella libreria parallela attività?
MODIFICA: solo per chiarire: SomeAsyncAutoResetEvent è un nome di classe completamente costituito utilizzato come segnaposto nel mio esempio.
Per one-time-uso, un 'TaskCompletionSource' il cui risultato viene ignorato dal compito in attesa. –
https://gist.github.com/AArnott/1084951 forse? –
@MatthewWatson Vedo che utilizza un blocco, che bloccherà un thread dal pool di thread. Speravo in qualcosa che non riguardasse un thread bloccato. –