😺

【Flutter】非同期処理のループ処理 (for文 or map)

2024/12/20に公開

非同期処理について

Flutterの画面描写にて表示が遅いなってものがありました。

色々考えていた時にfor文だから遅いんじゃないかな?の結論になりまして、処理を変えたら幾分か早くなったので備忘録でかきこ。

前までの処理 (遅)

for (final test in testList) {
     hoge.value.add(
     await hugaguga(test)
    );
}

forループの非同期処理 (順次)

上記でもわるくないのだが、forループ内でawaitを使用すると、各非同期操作が完了するまで次に進まないため、処理が"順次"に行われます。

これはシンプルな制御フローを提供しますが、各非同期操作が独立して並行して実行できる場合、全体の処理時間が長くなる可能性があります。

リストの数が多ければ多いほど処理時間がかかってしまうのがfor文。

変更後の処理 (早)

 final testguhu = testList.map((test) async {
    await hugaguga(test)
  }).toList();

  final result = await Future.wait(testguhu);
  mapList.addAll(result);

mapとFutureの非同期処理 (並列)

mapを使用して各非同期操作をFutureとして収集し、Future.waitでまとめて待機すると、各Futureが”並列”に実行されます。これにより、並列に非同期処理を実行することで、全体の待機時間を短縮できます。

順次か並列か

実装時に順次に処理するのか並列に処理するのか、どちらがよいのかはその時の条件によってことなるかと思います。

ですので上記はあくまで例ですが、僕が今回処理で必要としたのはmap側でした。

以上!!

Discussion