Heim Backend-Entwicklung C#.Net-Tutorial Vertieftes Verständnis der Hauptschnittstellen von C#Rx

Vertieftes Verständnis der Hauptschnittstellen von C#Rx

Mar 16, 2017 am 11:59 AM

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.
}
Nach dem Login kopieren

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"));
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Active Directory mit C# Active Directory mit C# Sep 03, 2024 pm 03:33 PM

Leitfaden zu Active Directory mit C#. Hier besprechen wir die Einführung und die Funktionsweise von Active Directory in C# sowie die Syntax und das Beispiel.

C#-Serialisierung C#-Serialisierung Sep 03, 2024 pm 03:30 PM

Leitfaden zur C#-Serialisierung. Hier besprechen wir die Einführung, die Schritte des C#-Serialisierungsobjekts, die Funktionsweise bzw. das Beispiel.

Zufallszahlengenerator in C# Zufallszahlengenerator in C# Sep 03, 2024 pm 03:34 PM

Leitfaden zum Zufallszahlengenerator in C#. Hier besprechen wir die Funktionsweise des Zufallszahlengenerators, das Konzept von Pseudozufallszahlen und sicheren Zahlen.

C#-Datenrasteransicht C#-Datenrasteransicht Sep 03, 2024 pm 03:32 PM

Leitfaden zur C#-Datenrasteransicht. Hier diskutieren wir die Beispiele, wie eine Datenrasteransicht aus der SQL-Datenbank oder einer Excel-Datei geladen und exportiert werden kann.

Muster in C# Muster in C# Sep 03, 2024 pm 03:33 PM

Leitfaden zu Mustern in C#. Hier besprechen wir die Einführung und die drei wichtigsten Arten von Mustern in C# zusammen mit ihren Beispielen und der Code-Implementierung.

Primzahlen in C# Primzahlen in C# Sep 03, 2024 pm 03:35 PM

Leitfaden zu Primzahlen in C#. Hier besprechen wir die Einführung und Beispiele von Primzahlen in C# sowie die Codeimplementierung.

Fakultät in C# Fakultät in C# Sep 03, 2024 pm 03:34 PM

Leitfaden zur Fakultät in C#. Hier diskutieren wir die Einführung in die Fakultät in C# zusammen mit verschiedenen Beispielen und Code-Implementierungen.

Der Unterschied zwischen Multithreading und asynchronem C# Der Unterschied zwischen Multithreading und asynchronem C# Apr 03, 2025 pm 02:57 PM

Der Unterschied zwischen Multithreading und Asynchron besteht darin, dass Multithreading gleichzeitig mehrere Threads ausführt, während asynchron Operationen ausführt, ohne den aktuellen Thread zu blockieren. Multithreading wird für rechenintensive Aufgaben verwendet, während asynchron für die Benutzerinteraktion verwendet wird. Der Vorteil des Multi-Threading besteht darin, die Rechenleistung zu verbessern, während der Vorteil von Asynchron nicht darin besteht, UI-Threads zu blockieren. Die Auswahl von Multithreading oder Asynchron ist von der Art der Aufgabe abhängt: Berechnungsintensive Aufgaben verwenden Multithreading, Aufgaben, die mit externen Ressourcen interagieren und die UI-Reaktionsfähigkeit asynchron verwenden müssen.

See all articles