flutter framework을 사용하여 응용 프로그램을 만들고 있습니다. 이 과정에서 Dart async
와 async*
. 아무도 그들 사이의 차이점이 무엇인지 말해 줄 수 있습니까?
답변
등의 기능을 표시 async
하거나 async*
그것을 사용할 수 있습니다 async
/ await
를 사용하는 키워드 Future
.
둘 다의 차이점 async*
은 항상 a를 반환하고 키워드를 Stream
통해 값을 방출하기 위해 구문 설탕을 제공 한다는 것 yield
입니다.
따라서 다음을 수행 할 수 있습니다.
Stream<int> foo() async* {
for (int i = 0; i < 42; i++) {
await Future.delayed(const Duration(seconds: 1));
yield i;
}
}
이 함수는 매초마다 증가하는 값을 방출합니다.
답변
짧은 답변
async
당신에게Future
async*
당신에게Stream
.
비동기
async
시간이 오래 걸리는 작업을 수행하는 함수에 키워드를 추가합니다 . 로 래핑 된 결과를 반환합니다 Future
.
Future<int> doSomeLongTask() async {
await Future.delayed(const Duration(seconds: 1));
return 42;
}
미래를 기다리면 그 결과를 얻을 수 있습니다.
main() async {
int result = await doSomeLongTask();
print(result); // prints '42' after waiting 1 second
}
비동기 *
async*
한 번에 하나씩 미래 값을 반환하는 함수를 만들기 위해 키워드를 추가합니다 . 결과는 Stream에 래핑됩니다.
Stream<int> countForOneMinute() async* {
for (int i = 1; i <= 60; i++) {
await Future.delayed(const Duration(seconds: 1));
yield i;
}
}
이에 대한 기술 용어는 비동기 생성기 함수 입니다. 함수를 떠나지 않기 때문에 yield
대신 값을 반환하는 데 사용 return
합니다.
await for
스트림에서 내 보낸 각 값을 기다리는 데 사용할 수 있습니다 .
main() async {
await for (int i in countForOneMinute()) {
print(i); // prints 1 to 60, one integer per second
}
}
계속
자세한 내용은 다음 비디오, 특히 Generators에 대한 비디오를 참조하십시오.