반응형
질문
저는 플러터 프레임워크를 사용하여 애플리케이션을 만들고 있습니다.
이 과정에서 Dart의 async
와 async*
키워드를 만났습니다.
둘 사이에 차이가 무엇인지 알려주실 수 있는 분 계신가요?
답변
짧은 대답
async
는Future
를 반환합니다.async*
는Stream
을 반환합니다.
async
시간이 오래 걸릴 수 있는 작업을 수행하는 함수에 async
키워드를 추가합니다. 이는 결과를 Future
로 감싸 반환합니다.
Future<int> doSomeLongTask() async {
await Future.delayed(const Duration(seconds: 1));
return 42;
}
Future를 기다려 결과를 얻을 수 있습니다:
main() async {
int result = await doSomeLongTask();
print(result); // 1초 후 '42' 출력
}
async*
여러 개의 Future 값을 반환하고 각각을 하나씩 전달하는 함수를 만들기 위해 async*
키워드를 추가합니다. 결과는 Stream으로 감싸집니다.
Stream<int> countForOneMinute() async* {
for (int i = 1; i <= 60; i++) {
await Future.delayed(const Duration(seconds: 1));
yield i;
}
}
이를 비동기 제너레이터 함수라고 합니다. 함수를 떠나지 않으므로 return
대신 yield
를 사용하여 값을 반환합니다.
await for
를 사용하여 Stream이 방출하는 각 값을 기다릴 수 있습니다.
main() async {
await for (int i in countForOneMinute()) {
print(i); // 1부터 60까지, 1초마다 하나씩 출력
}
}
이어서
더 알아보려면 특히 제너레이터에 대한 이 비디오를 시청하세요:
반응형
댓글