— Dart, Async, Programming — 1 min read
In Dart, the keywords async and async* are used to handle asynchronous operations, but they serve different purposes. This article explains the differences between them - with some practical examples included.
async?The async keyword is used to mark a function as asynchronous. It allows the use of await within the function and returns a Future.
async:1Future<int> doSomeLongTask() async {2 await Future.delayed(const Duration(seconds: 1));3 return 42;4}5
6void main() async {7 int result = await doSomeLongTask();8 print(result); // prints '42' after waiting 1 second9}async*?The async* keyword marks a function as an asynchronous generator, which returns a Stream of values instead of a single value.
async*:1Stream<int> countForOneMinute() async* {2 for (int i = 1; i <= 60; i++) {3 await Future.delayed(const Duration(seconds: 1));4 yield i;5 }6}7
8void main() async {9 await for (int i in countForOneMinute()) {10 print(i); // prints 1 to 60, one integer per second11 }12}async functions return a Future and are useful for single asynchronous operations.async* functions return a Stream and are used to emit multiple asynchronous values over time.yield is used in async* functions to emit values, while return is used in async functions.async for functions that perform a single asynchronous task and need to return a value.async* for functions that need to emit multiple values over time, such as in data streams or periodic updates.