仕事で Flutter をちょっといじっていて、いい加減 async あたりをちゃんと理解しておこうと思ったのでメモ。
https://dart.dev/tutorials/language/futures
Dart コードはシングルスレッドで実行される
Dart は基本的にシングルスレッドで実行される。
並列処理を行いたい場合は Isolate を利用する。
Future は非同期オペレーションの結果を表す
Future は非同期オペレーションの結果を表している。
ここは Java と同じだね。
Future が完了するまで待つには async
関数で await
を使う
void main() async {
await something();
print('all done');
}
await
を使うためには関数に async
を付与する必要がある。
async
関数では以下の条件のいずれかを満たすまで同期的に実行される。
以下のどれかにたどりつくと Future を返し、非同期的に実行される。
- 関数で最初の
await
return
文
- 関数の終わり
await
のあれこれ
await expression
の expression
は通常 Future を返す関数である。
しかし、expression
が Future を返さない場合は、自動的に Future でラップされる。
なお、await expression
文自体は Future の完了した値を返す。
import "dartd:async";
void main() async {
int i = await something();
print(i);
}
int something() {
return 1;
}
完了を待ちつつスレッドをブロックしない、っていうのが await で気楽に使えるのはいいなぁ。