Ich mache eine Anwendung mit Flatter-Framework. Dabei bin ich auf die Schlüsselwörter in Dart async
und gestoßen async*
. Kann mir jemand sagen, was der Unterschied zwischen ihnen ist?
84
Markieren einer Funktion als async
oder async*
ermöglicht die Verwendung von async
/ await
keyword zur Verwendung von a Future
.
Der Unterschied zwischen beiden besteht darin, dass async*
immer a zurückgegeben wird Stream
und etwas Syntaxzucker angeboten wird, um einen Wert über das yield
Schlüsselwort auszugeben.
Wir können daher Folgendes tun:
Stream<int> foo() async* {
for (int i = 0; i < 42; i++) {
await Future.delayed(const Duration(seconds: 1));
yield i;
}
}
Diese Funktion gibt jede Sekunde einen Wert aus, der jedes Mal erhöht wird
Dart Documentation
sowie eine Referenz zu lesen :)Kurze Antwort
async
gibt dir eineFuture
async*
gibt dir eineStream
.asynchron
Sie fügen das
async
Schlüsselwort einer Funktion hinzu, die einige Arbeiten ausführt, die möglicherweise lange dauern. Es gibt das in a eingeschlossene Ergebnis zurückFuture
.Future<int> doSomeLongTask() async { await Future.delayed(const Duration(seconds: 1)); return 42; }
Sie können dieses Ergebnis erzielen, indem Sie auf die Zukunft warten:
main() async { int result = await doSomeLongTask(); print(result); // prints '42' after waiting 1 second }
asynchron *
Sie fügen das
async*
Schlüsselwort hinzu, um eine Funktion zu erstellen, die nacheinander eine Reihe zukünftiger Werte zurückgibt. Die Ergebnisse werden in einen Stream eingeschlossen.Stream<int> countForOneMinute() async* { for (int i = 1; i <= 60; i++) { await Future.delayed(const Duration(seconds: 1)); yield i; } }
Der Fachbegriff hierfür lautet asynchrone Generatorfunktion . Sie verwenden
yield
geben einen Wert zurück, anstattreturn
die Funktion nicht zu verlassen.Sie können verwenden
await for
, um auf jeden vom Stream ausgegebenen Wert zu warten.main() async { await for (int i in countForOneMinute()) { print(i); // prints 1 to 60, one integer per second } }
Weiter geht's
Sehen Sie sich diese Videos an, um mehr zu erfahren, insbesondere über Generatoren:
quelle