Wir haben dieses häufige Szenario, in dem wir eine Methode haben, die asynchrone Aktionen ausführt und ein Ereignis auslöst, wenn es fertig ist.Gibt es eine allgemeine Möglichkeit, eine asynchrone Methode zu synchronisieren?
Es gibt Zeiten, in denen wir es synchron stattdessen getan wollen, so dass wir Code haben, der in etwa so aussieht:
ManualResetEvent reset = new ManualResetEvent(false);
someobject.AsyncActionDone += (sender, args) => reset.Set();
someobject.PerformAsyncAction();
reset.WaitOne();
Gibt es eine Möglichkeit, eine Hilfsmethode zu schreiben, dies zu tun? Ich kann die Aktion übergeben, aber ich bin mir nicht sicher, wie ich etwas übergeben kann, das die Hilfsmethode weiß, welches Ereignis zu hören ist, da es nicht so aussieht, als könnte man einen EventHandler als Parameter übergeben.
Vorzugsweise wird eine Lösung, die nicht Reflexion
es einige Verwirrung scheint nicht erforderlich zu sein, ist dies eine Probe der Klasse Der schreibt Someobject der ist wie:
public class SomeClass
{
private ExternalServer someServerOverTheNetwork = new ExternalServer();
public event EventHandler AsyncActionDone;
public Data SomeData { get; set; }
public void PerformAsyncAction()
{
someServerOverTheNetwork.GetSomeData(OnDataRetrived);
}
public Data OnDataRetrived(Data someData)
{
AsyncActionDone(this, new DataEventArgs(someData));
}
}
Sind Sie der Implementierer von SomeObject oder ist es ein Bibliothekstyp, der nicht geändert werden kann? –
Wir sind, aber es gibt viele solche Objekte. Die meisten Aktionen umfassen das Senden einer Anfrage an einen Server und das Warten darauf, dass das Ergebnis zurückkommt. Daher sind sie standardmäßig asynchron. – Davy8
Wir haben eine Methode, um dies für eine unserer gängigsten Aktionen zu tun, indem wir eine Liste von Objekten vom Server zwischenspeichern, dies hängt jedoch von der Kenntnis des genauen Objekttyps und des zu hörenden Ereignisses ab. Ich möchte in der Lage sein, in welchem Ereignis zu hören, damit wir doppelten Code reduzieren können, da die einzigen Dinge, die sich unterscheiden, die Methode und das Ereignis sind, das nach Abschluss ausgelöst wird. – Davy8