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


84

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

답변:


112

등의 기능을 표시 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;
  }
}

이 함수는 매초마다 증가하는 값을 방출합니다.


2
예를 얻을 수있는 위치를 추가해야합니다. Dart Documentation참조뿐 아니라
읽기도 좋습니다.

3
@ Skizo-ozᴉʞS 링크가 죽었습니다. 내가 찾을 수있는 최고의 문서는 dart.dev/tutorials/language/streams 입니다.
wdev

1
함수를 async *로 표시함으로써 yield 키워드를 사용하고 데이터 스트림을 반환 할 수 있습니다.
Yash

71

짧은 답변

  • 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에 대한 비디오를 참조하십시오.


2
'동영상보기'– 텍스트 참조도 제공 할 수 있다면 좋을 것입니다. 모든 사람이 비디오를 좋아하는 것은 아닙니다 ...
Aconcagua
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.