async vs async*

Jooni·2020년 11월 26일
0

Jooni_ Flutter 오답노트

목록 보기
21/26

stream을 공부하다가 dart에서 async가 두가지 종류임을 알았다.
구글링으로 열심히 삽질을 해 봤으나 확실히 이해가되는 설명은 하나 밖에 없고 나머지는 다 이해가 안가서 정리를 해보고자 한다.

요약

asyncasync*
return Future<>return Stream<>

async

Future<int> doLongTimeTask() async {
  var time = await Future.delayed(const Duration(seconds: 1));
  return time;
}
  • async 키워드는 doLongTimeTask()가 실행되는 시점보다 '늦게' 메서드작동이 끝나는 메서드를 위해 쓰인다. 자세한 것은 await async를 찾아보시길.
  • async 는 delay가 있을 수 있는 메서드를 await로 실행시켜주기 위해 존재한다.

그렇다면 async*는 무엇이 다른가?

기본적으로 async*도 하는 역할은 같다.

다만 타입이 stream 일 뿐.
그러니까 Stream을 다룰 때는 async*를 쓰고 Future나 딜레이되는 함수를 다룰 때는 async를 쓴다고 보면 된다.
그런데... 이걸 왜 나누어 쓰는지.. 잘 모르겠다..


내 설명이 부족한거 같으면 아래의 링크 참조

여기 클릭

profile
이해가 안돼시거나 질문이 있으신 분들은 댓글로 남겨주세요. 성심성의껏 응하겠습니다!

1개의 댓글

comment-user-thumbnail
2022년 10월 3일

저도 flutter 잘 모르지만, 검색해보다가 들렀습니다.
https://youtu.be/M9J-JJOuyE0?t=400
StreamBuilder 에 대한 예시가 있는데요,
async* 는 함수 중간에 yield 를 이용해서 중간 진행 결과를 원래의 실행스콥으로 전달해주는 용도 같네요.
Future 로 return 할때도 yield 를 사용할 수 있는지는 잘 모르겠지만, return 해야 결과를 받을수 있다 정도가 다르지않을까 싶은데...
어떻게 생각하시나요?

답글 달기