Streams y async* en Dart
Un generador que emite en el tiempo; await for consume en orden.
// async* builds a Stream; yield emits into it as values are ready.
Stream<String> radioCalls() async* {
final calls = ['curlew west', 'two egrets', 'harrier over reeds'];
for (final call in calls) {
await Future.delayed(const Duration(milliseconds: 20));
yield call;
}
}
Future<void> main() async {
// await for consumes the stream in arrival order.
await for (final call in radioCalls()) {
print('Radio: $call');
}
final count = await radioCalls().length;
print('$count calls this watch');
}
Cómo funciona
async*construye unStream;yieldemite cada valor.await foritera a medida que los valores llegan.- Los getters de Stream como
.lengthson futures a su vez.
Palabras clave y builtins usados aquí
Stringasyncawaitconstfinalforinvoidyield
El intento, en números
- Líneas
- 17
- Caracteres a escribir
- 494
- Tokens
- 105
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 97 segundos.
Paso 2 de 3 en Async; paso 23 de 27 en Fundamentos del lenguaje.