Stolperte über diesen Beitrag , in dem es darum geht, asynchrone Webanfragen zu stellen.
Abgesehen von der Einfachheit, wenn Sie in der realen Welt nur eine asynchrone Anfrage stellen und in der nächsten Zeile darauf warten, ist das nicht gleichbedeutend mit einem Synchronisierungsanruf?
c#
.net
asynchronous-programming
Mrchief
quelle
quelle
Antworten:
Nein
async + await != sync
, wegen der FortsetzungAus MSDN "Asynchrone Programmierung mit Async und Await (C # und Visual Basic)"
Beispielsweise blockiert die asynchrone Ausführung den UI-Thread nicht und
Some TextBox.Text
wird nach Abschluss des Downloads aktualisiertquelle
Console.WriteLine(await GetStringOverNetwork());
? Was ist, wenn Sie die Ausgabe des asynchronen Aufrufs benötigen? Würde das Programm beim ersten Zugriff blockieren, selbst wenn der Thread möglicherweise die Ausführung fortsetzen könnte?Nein, es ist nicht dasselbe.
Ihr
async
Codeblock wartet auf dieawait
Rückkehr des Aufrufs, um fortzufahren. Der Rest Ihrer Anwendung wartet jedoch nicht und kann wie gewohnt fortgesetzt werden.Im Gegensatz dazu würde ein synchroner Aufruf Ihre gesamte Anwendung oder Ihren gesamten Thread warten lassen, bis die Ausführung des Codes abgeschlossen ist, um mit etwas anderem fortzufahren.
quelle
Bitte erlauben Sie mir, die Dinge in Bezug auf async / await zu klären.
Wenn Warten auftritt, ermöglicht die zugrunde liegende Zustandsmaschine die sofortige Rückgabe der Steuerung. Wenn der erwartete Aufruf abgeschlossen ist, ermöglicht die zugrunde liegende Zustandsmaschine, dass die Ausführung an der Leitung nach dem erwarteten Aufruf fortgesetzt wird.
Daher wird der asynchrone Block nicht blockiert und wartet nicht auf den Abschluss des erwarteten Aufrufs. Die Steuerung wird sofort zurückgegeben, wenn der Befehl await auftritt.
Die zugrunde liegende Zustandsmaschine ist Teil der "Magie" hinter der Verwendung von async / await, die nicht ungenutzt bleibt und übersehen wird.
quelle
Ich bin mit der gleichen Frage darüber gestolpert, doch nach dem Lesen der Antworten scheint die Frage zu verweilen, verwirrt durch Verweise auf "Magie unter der Haube".
Aus der oben erwähnten asynchronen Programmierung :
Wird der Kontext, in dem Begegnungen stattfinden
await
, blockiert?Blockiert der Rest der Anwendung das
await
?Es hängt davon ab, wie Ihre Bewerbung geschrieben ist. Wenn es sich um eine Reihe von abhängigen
await
Aufgaben handelt, die nacheinander im selben Kontext gestartet werden (siehe: Versuchen, ein gewisses Async / Wartet-Verhalten zu verstehen )Auf diese Weise
await
würde jeder das Laichen des nächsten blockieren.Andererseits würden die gleichen abhängigen Aufgaben, die parallel gestartet werden, parallel ausgeführt und der Kontext würde nur an der entsprechenden Stelle blockiert.
await
:Im Allgemeinen
await
ergibt die Ausführung den äußeren Kontext, von dem aus der aktuelle Kontext aufgerufen wird. Wenn jedoch der äußere Kontext selbst auf den Strom wartet, ist es wie ein sequenziellesawait
s im selben Kontext.Um die
async
Vorteile zu nutzen, muss die Anwendung so konzipiert werden, dass sie mehrere parallele Kontexte (Benutzeroberfläche, Datenclient usw.) ausführt.await
In einem Kontext werden dann andere Kontexte ausgeführt, sodass die gesamte Anwendung nicht einzelne Kontexte blockiertawait
.quelle