Wie man ein thread warten, bis eine variable erreicht mit einer Reihe von Werten .NET/Csharp

Ich geschrieben habe eine Klasse, die eine Eigenschaft des Typs TProperty und ein Ereignis vom Typ Action<TProperty> dass feuert, wenn diese Eigenschaft sich ändert. TProperty ist in der Regel ein enum-Typ, aber das sollte keine Rolle spielen.

Ich möchte erstellen Sie eine Methode mit der Signatur

bool WaitUntilPropertyIs(int TimeoutMs, IEnumerable<TProperty> AllowedValues) 

blockiert der thread, der nannte es, bis die änderungen der Eigenschaft auf einen Wert, der in AllowedValues. Natürlich, wenn WaitUntilPropertyIs wird aufgerufen, wenn die Eigenschaft ist bereits einer der AllowedValues sollte es keine Sperrung. WaitUntilPropertyIs warten soll, bei den meisten TimeoutMs aus und gibt false zurück wenn die Wartezeit überschritten wird (normal AutoResetEvent.Wait Semantik).

Ich bin offen mit Reactive Extensions oder traditionelle Synchronisations-Konstrukte.

Was versuchen Sie zu erreichen, indem Sie dies zu tun?
Die Klasse I im Sinne der ursprünglichen Frage hat einer state-Maschine. Die Eigenschaft beobachtet wird, ist der Zustand der state machine. Manchmal ist die operation, die ich durchführen möchten auf die Klasse kann nur erfolgen in bestimmten Staaten. So WaitUntilPropertyIs pausiert den aktuellen thread, bis die Instanz der Klasse wechselt in den entsprechenden Zustand.

InformationsquelleAutor sevzas | 2011-10-18

Schreibe einen Kommentar