Was wäre das asynchrone (erwartete) Äquivalent von AutoResetEvent?Akzeptiert AutoResetEvent
Wenn im klassischen Thread-Synchronisierung würden wir so etwas wie folgt verwenden:
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
//..
//..
}
Ich war in der neuen Asynchron-Art, die Dinge zu tun, um so etwas zu sein, würde der Hoffnung, dass:
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
//..
//..
}
Ich habe andere maßgeschneiderte Lösungen gesehen, aber was ich zu einem bestimmten Zeitpunkt in die Finger bekommen habe, beinhaltet immer noch das Sperren eines Threads. Ich will das nicht nur, um die neue "await" -Syntax zu verwenden. Ich suche nach einem wahrlich erwarteten Signalmechanismus, der keinen Thread sperrt.
Ist es etwas, was ich in der Task Parallel Library fehlt?
BEARBEITEN: Nur um klar zu stellen: SomeAsyncAutoResetEvent ist ein vollständig zusammengesetzter Klassenname, der in meinem Beispiel als Platzhalter verwendet wird.
Zum einmaligen Gebrauch, ein 'TaskCompletionSource', deren Ergebnis durch die erwartete Aufgabe ignoriert. –
https://gist.github.com/AArnott/1084951 vielleicht? –
@MatthewWatson Ich sehe, dass es eine Sperre verwendet, die einen Thread aus dem Thread-Pool blockiert. Ich hatte auf etwas gehofft, das keinen blockierten Thread enthielt. –