揮発性のメモ2

http://d.hatena.ne.jp/iww/

awaitとasync

awaitとasyncが良くわかってないので勉強中
asyncは、この関数は時間がかかりますよという意味(非同期関数であるという宣言)
awaitは、非同期関数を呼び出すときに終わるまで待ちますよという意味(非同期関数を同期処理する)
という解釈でいいんかな

main.dart

void main() async {
  print("はじめ");
  hoge.mysleep(2);
  print("おわり");
}

hoge.dart

Future<void> mysleep(int b) async {
  print("  オレsleep $b秒 開始");
  await Future.delayed(Duration(seconds: b));
  print("  オレsleep $b秒 終了");
}


b秒待つ関数mysleepを呼ぶとき、awaitをつける/つけないで動きがどうなってんのか

非同期関数をawaitなしで呼ぶとき

f:id:iww:20220112231324p:plain
普通に呼ぶと、awaitにぶつかった時点で 呼び出し元に返る。
awaitで待ってる処理は、終わったら続きがうごく

はじめ
  オレsleep 2秒 開始
おわり
  オレsleep 2秒 終了

非同期関数をawaitありで呼ぶとき

f:id:iww:20220111110631p:plain
awaitをつけると、呼び出した関数が終わるまで待つ

はじめ
  オレsleep 2秒 開始
  オレsleep 2秒 終了
おわり

sleep関数を呼ぶとき

f:id:iww:20220111111341p:plain
sleep function - dart:io library - Dart API
sleep関数はなんか特別で、その場でブロックしてしまうらしい。なので、そのスレッドが止まってしまう。

はじめ
  本物sleep 2秒 開始
  本物sleep 2秒 終了
おわり

あんまり使わない方がよさそう