【Flutter / Dart】async awaitについて<非同期処理>

8131 ワード

概要

今日はDartの非同期処理について勉強しました。
async awaitについて学びました✏️

リンク集

内容

同期処理、非同期処理とは

  • 同期処理
    自身の処理が完了するまで、次の処理を実行しない
  • 非同期処理
    自身の処理が完了する前に、他の処理を実行できる

やってみた。

const delays = [1, 2, 3];

void main() {
  printLinesWithDelay();
}

Future<void> printLinesWithDelay() async {
  for (final string in generateFutureStrings()) {
    print(await string);
  }
}

List<Future<String>> generateFutureStrings() {
  return delays.map((delay) {
    return Future.delayed(
      Duration(seconds: delay),
      () =>
          'Printed with $delay second${delay > 1 ? 's' : ''} delay ${delay == delays.last ? '\nTa-da! All lines are printed!' : ''}',
    );
  }).toList();
}

【解説】
これは、1秒に一回メッセージをコマンドラインメッセージとして表示するプログラムです。

【ポイント】

  • Future.delayed(a, b)の場合a => (Durationという指定期間待ったあと処理を実行する)b => (実行する処理)
  • 【公式】時間の処理
// 1秒後にしょりを実行。
Future.delayed(const Duration(millisecond: 1000), () {
print('Hello World');
});

// 1.5秒まつ
Future.delayed(const Duration(millisecond: 1500),);
print('Hello World');

上記は結果的には同じ結果になるか、使い方を知っているといろんな場面で使うことができる。

その他

async awaitを学んでいったなかで、
「Isolateは知っているかい?」
そう言われた、調べてみると非同期でよく使うcomputeの処理の中に内包している処理みたいだ。

はっきりとはわかっていないが、
HTTP通信などの結果を得る場合に使っているthenの処理ことらしい。
Isolatesの処理自体も存在しているが、使い道はよくわからない。Isolates内のみで処理を行い、結果をメッセージのみで受け取れることみたいだ。

時間がある時にもう少し深ぼりしてみようと思う。