Dart 비동기 프로그래밍 Streams 요약

https://www.dartlang.org/tutorials/language/streams

Future는 결과가 준비됐을 때 우리에게 알려준다. Stream은 이벤트가 발생할 때마다 우리에게 알려준다.

import 'dart:async';

Stream<Future<int>> countStream(int to) async* {
  for (int i = 1; i <= to; i++) {
    yield Future.delayed(Duration(seconds: 1), () => i); // 1초 후에 i를 반환하는 Future를 발생시킨다.
  }
}

Future<void> printSumStream(Stream<Future<int>> stream) async {
  var sum = '';
  await for (var value in stream) {
    // 스트림의 이벤트 발생이 끝날 때가지 기다린다.
    sum += (await value).toString(); // 이벤트도 Future라서 Future의 작업이 끝날 때까지 기다린다.
    print(sum); // sum에 Future가 반환한 값을 더해서 출력한다.
  }
}

printSyncMsg() {
  print('This is sync msg.');
}

main() async {
  var stream = countStream(3);
  printSumStream(stream);
  printSyncMsg();
}