stream을 공부하다가 dart에서 async가 두가지 종류임을 알았다.
구글링으로 열심히 삽질을 해 봤으나 확실히 이해가되는 설명은 하나 밖에 없고 나머지는 다 이해가 안가서 정리를 해보고자 한다.
async | async* |
---|---|
return Future<> | return Stream<> |
Future<int> doLongTimeTask() async {
var time = await Future.delayed(const Duration(seconds: 1));
return time;
}
async
키워드는 doLongTimeTask()가 실행되는 시점보다 '늦게' 메서드작동이 끝나는 메서드를 위해 쓰인다. 자세한 것은 await async를 찾아보시길.async
는 delay가 있을 수 있는 메서드를 await
로 실행시켜주기 위해 존재한다.그렇다면
async*
는 무엇이 다른가?
다만 타입이 stream 일 뿐.
그러니까 Stream을 다룰 때는 async*를 쓰고 Future나 딜레이되는 함수를 다룰 때는 async를 쓴다고 보면 된다.
그런데... 이걸 왜 나누어 쓰는지.. 잘 모르겠다..
저도 flutter 잘 모르지만, 검색해보다가 들렀습니다.
https://youtu.be/M9J-JJOuyE0?t=400
StreamBuilder 에 대한 예시가 있는데요,
async* 는 함수 중간에 yield 를 이용해서 중간 진행 결과를 원래의 실행스콥으로 전달해주는 용도 같네요.
Future 로 return 할때도 yield 를 사용할 수 있는지는 잘 모르겠지만, return 해야 결과를 받을수 있다 정도가 다르지않을까 싶은데...
어떻게 생각하시나요?