Dart の非同期プログラミング(Future, async/await)
仕事で 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 { // 自動的に Future にラップされ、Future の完了値 int を返す int i = await something(); print(i); } int something() { return 1; }
完了を待ちつつスレッドをブロックしない、っていうのが await で気楽に使えるのはいいなぁ。