


Ausführliche Erklärung und Beispiele zur Synchronisierung mit AutoResetEvent in C#
Dieser Artikel stellt hauptsächlich die relevanten Informationen zur Verwendung von C# zum Erreichen der Synchronisierung vor. Interessierte Freunde können auf die vorherigen Artikel verweisen.
Heute bin ich auf a gestoßen Problem mit der sequentiellen Ausführung eines Threads, bei dem es sich um einen asynchronen Thread handelt, der eine Datenanforderung an die A-Schnittstelle sendet. Ein anderer asynchroner Thread sendet eine Datenanforderung an die B-Schnittstelle. Wenn sowohl A als auch B erfolgreich ausgeführt werden, sendet er eine Anforderung an die C-Schnittstelle. Um ehrlich zu sein, habe ich an BS-Projekten gearbeitet und weiß nicht viel über Threads. Ich wusste, dass AutoResetEvent mit Threads zusammenhängt und für den Thread-Wechsel verwendet wird, daher habe ich mich entschieden, AutoResetEvent zu verwenden, um die oben genannten Probleme zu lösen.
Also habe ich online nach relevanten Informationen gesucht:
Es stellte sich heraus, dass AutoResetEvent häufig in der .Net-Multithread-Programmierung verwendet wird. Wenn ein Thread die WaitOne-Methode aufruft, befindet sich das Signal im Sendestatus, der Thread erhält das Signal und das Programm wird weiter ausgeführt, andernfalls wartet es. Darüber hinaus erlaubt AutoResetEvent.WaitOne () jeweils nur den Eintritt eines Threads. Wenn ein Thread das Signal erhält, setzt AutoResetEvent das Signal automatisch in einen nicht sendenden Zustand. Mit anderen Worten: , AutoResetEvent kann nur Wenn ein Thread aufgeweckt wird, sind andere Threads weiterhin blockiert.
Einführung
AutoResetEvent(bool initialState): Konstruktor , mit einer Angabe, ob der Anfangszustand auf „Beenden“ gesetzt werden soll Boolescher Wert, der eine neue Instanz dieser Klasse initialisiert.
false: Kein Signal, die WaitOne-Methode des untergeordneten Threads wird nicht automatisch aufgerufen
true: Es liegt ein Signal vor, die WaitOne-Methode des untergeordneten Threads wird automatisch aufgerufen
Reset (): Setzt die Der Ereignisstatus wird in einen nicht beendeten Zustand versetzt, wodurch der Thread blockiert wird. Wenn die Operation erfolgreich ist, wird „true“ zurückgegeben, andernfalls wird „false“ zurückgegeben.
Set (): Setzt den Ereignisstatus auf den Status „Beendet“, sodass ein oder mehrere wartende Threads fortgesetzt werden können. Wenn der Vorgang erfolgreich ist, wird „true“ zurückgegeben.
WaitOne(): Blockiert den aktuellen Thread, bis ein Signal empfangen wird.
WaitOne(TimeSpan, Boolean): Blockiert den aktuellen Thread, bis die aktuelle Instanz das Signal empfängt, verwendet TimeSpan zum Messen des Zeitintervalls und gibt an, ob die Synchronisierungsdomäne vor dem Warten verlassen werden soll.
WaitAll(): Auf alle Signale warten.
Implementieren
class Program { static void Main() { Request req = new Request(); //这个人去干三件大事 Thread GetCarThread = new Thread(new ThreadStart(req.InterfaceA)); GetCarThread.Start(); Thread GetHouseThead = new Thread(new ThreadStart(req.InterfaceB)); GetHouseThead.Start(); //等待三件事都干成的喜讯通知信息 AutoResetEvent.WaitAll(req.autoEvents); //这个人就开心了。 req.InterfaceC(); System.Console.ReadKey(); } } public class Request { //建立事件数组 public AutoResetEvent[] autoEvents = null; public Request() { autoEvents = new AutoResetEvent[] { new AutoResetEvent(false), new AutoResetEvent(false) }; } public void InterfaceA() { System.Console.WriteLine("请求A接口"); Thread.Sleep(1000*2); autoEvents[0].Set(); System.Console.WriteLine("A接口完成"); } public void InterfaceB() { System.Console.WriteLine("请求B接口"); Thread.Sleep(1000 * 1); autoEvents[1].Set(); System.Console.WriteLine("B接口完成"); } public void InterfaceC() { System.Console.WriteLine("两个接口都已经请求完,正在处理C"); } }
Beachten Sie, dass es am besten ist, WaitOne oder WaitAll eine Zeitüberschreitung hinzuzufügen. Andernfalls wird kein Signal empfangen und der Thread wird immer blockiert.
Nachwort
Dies ist nur eine Vereinfachung der obigen Szene, die hauptsächlich zur Lösung des Problems der gerade erwähnten Szene verwendet wird.
Das Obige ist eine Zusammenfassung meiner Verwendung von AutoResetEvent. Bitte geben Sie mir einige Hinweise auf die Mängel.
Das obige ist der detaillierte Inhalt vonAusführliche Erklärung und Beispiele zur Synchronisierung mit AutoResetEvent in C#. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



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.

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

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

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.

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.

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

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 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.
