Dieser Artikel stellt hauptsächlich die wichtigsten Schnittstellen von C# Rx vor und relevante Informationen für ein tieferes Verständnis. Freunde in Not können auf
C# zurückgreifen. Rx Ein umfassendes Verständnis der Hauptschnittstellen
Die IObservable/IObserver-Schnittstellen sind in der .NET Framework 4.0-Basis--Klassenbibliothek verfügbar und in .NET 3.5 enthalten die installiert werden kann, in Paketen in Silverlight 3 und 4 und JavaScript.
IObservable/IObserver
Rx macht asynchrone und Ereignis-basierte Datenquellen als Push-basierte beobachtbare Sequenzen verfügbar, die auf .NET Framework 4.0 basieren. Das Neue IObservable-Schnittstellenabstraktion in . Die IObservable-Schnittstelle ist eine Duplikation der bekannten IEnumerable-Schnittstelle für Pull-basierte, aufzählbare Sammlungen. Es stellt eine beobachtbare Datenquelle dar, das heißt, es kann Daten an jeden Interessierten senden. Es verwaltet eine Liste abhängiger IObserver-Implementierungen, die solche interessierten Listener repräsentieren, und benachrichtigt sie automatisch über alle Statusänderungen.
Eine Implementierung der IObservable-Schnittstelle kann als Sammlung von Elementen vom Typ T betrachtet werden. Daher kann ein IObservable als eine Sammlung von Ganzzahlen betrachtet werden, wobei Ganzzahlen an abonnierte Beobachter gesendet werden.
Wie in „Was ist Rx“ erwähnt, wird das Pushen von The Die andere Hälfte des Modells wird durch die IObserver-Schnittstelle repräsentiert, die einen Beobachter darstellt, der über Abonnements Interesse angemeldet hat. Das Element wird dann aus der beobachtbaren Sequenz, die es abonniert hat, an den Beobachter geliefert.
Um Benachrichtigungen von einer beobachtbaren Sammlung zu erhalten, übergeben Sie ihr mithilfe der Subscribe-Methode von IObservable ein IObserver--Objekt . Als Gegenleistung für diesen Beobachter gibt die Subscribe-Methode ein IDisposable-Objekt als Handle für das Abonnement zurück. Auf diese Weise können Sie das Abonnement bereinigen, wenn Sie fertig sind. Durch den Aufruf von Dispose für dieses Objekt wird der Beobachter von der Quelle getrennt, sodass keine Benachrichtigungen mehr übermittelt werden. Wie Sie daraus schließen können, besteht in Rx keine Notwendigkeit, sich explizit von Ereignissen abzumelden, wie im .NET-Ereignismodell.
Der Beobachter unterstützt drei Veröffentlichungsereignisse, die durch die Methoden der Schnittstelle widergespiegelt werden. OnNext kann null oder mehrmals aufgerufen werden, wenn für die beobachtbare Datenquelle Daten verfügbar sind. Beispielsweise könnte eine beobachtbare Datenquelle für Mausbewegungsereignisse bei jeder Mausbewegung ein Point-Objekt ausgeben. Die anderen beiden Methoden werden verwendet, um den Abschluss oder Fehler anzuzeigen.
Die IObservable/IObserver-Schnittstellen sind unten aufgeführt.
public interface IObservable<out T> { IDisposable Subscribe(IObserver<T> observer); } public interface IObserver<in T> { void OnCompleted();// Notifies the observer that the source has finished sending messages. void OnError(Exception error); // Notifies the observer about any exception or error. void OnNext(T value); // Pushes the next data value from the source to the observer. }
Rx bietet auch die Subscribe-Erweiterungsmethode, sodass Sie die Implementierung der IObserver-Schnittstelle nicht selbst implementieren müssen. Für jedes veröffentlichte Ereignis (OnNext, OnError, OnCompleted) der beobachtbaren Sequenz können Sie den Delegaten angeben, der aufgerufen wird, wie im folgenden Beispiel gezeigt. Wenn für das Ereignis keine Aktion angegeben ist, tritt das Standardverhalten auf.
IObservable<int> source = Observable.Range(1, 5); //creates an observable sequence of 5 integers, starting from 1 IDisposable subscription = source.Subscribe( x => Console.WriteLine("OnNext: {0}", x), //prints out the value being pushed ex => Console.WriteLine("OnError: {0}", ex.Message), () => Console.WriteLine("OnCompleted"));
Sie können sich eine beobachtbare Sequenz (z. B. eine Sequenz von Mouseover-Ereignissen) als normale Sammlung vorstellen. Daher können Sie LINQ-Abfragen für Sammlungen schreiben, um Filterung, Gruppierung, Zusammensetzung usw. durchzuführen. Um beobachtbare Sequenzen nützlicher zu machen, stellt die Rx-Assembly eine Reihe von Factory-LINQOperatoren bereit, sodass Sie keinen davon selbst implementieren müssen. Dadurch wird das Subjekt der beobachtbaren Sequenz mithilfe von LINQ-Operatoren abgefragt. Warnung:
Sie müssen die IObservable/IObserver-Schnittstelle nicht selbst implementieren. Rx stellt Ihnen interne Implementierungen dieser Schnittstellen zur Verfügung und macht sie über verschiedene Erweiterungsmethoden verfügbar, die von den Typen Observable und Observer bereitgestellt werden. Weitere Informationen finden Sie im Thema „Erstellen und Abfragen beobachtbarer Sequenzen“
Das obige ist der detaillierte Inhalt vonVertieftes Verständnis der Hauptschnittstellen von C#Rx. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!