[dart] Dart에서 비동기와 비동기 *의 차이점은 무엇입니까?

flutter framework을 사용하여 응용 프로그램을 만들고 있습니다. 이 과정에서 Dart asyncasync*. 아무도 그들 사이의 차이점이 무엇인지 말해 줄 수 있습니까?



답변

등의 기능을 표시 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에 대한 비디오를 참조하십시오.


답변