プログラミング

【Flutter】複数の非同期処理を実行する際のパターン4つ

Flutterで複数の非同期処理を実行する際のパターンをまとめました。

Future<String> asynchronous(String param) async {
  return '戻り値: $param';
}

ひとつずつ直列で実行

Future<void> example1({required List<String> parameters}) async {
  for (final String param in parameters) {
    await asynchronous(param);
  }
}

一気に並列で実行

Future<void> example3({required List<String> parameters}) async {
  final List<Future<bool>> futures = <Future<bool>>[];

  Future<bool> f(String param) async {
    await asynchronous(param);
    return true;
  }

  for (final String param in parameters) {
    futures.add(f(param));
  }
  await Future.wait(futures);
}

複数まとめて並列で実行

Future<void> example2({required List<String> parameters}) async {
  const int threadNum = 3;

  List<Future<bool>> futures = <Future<bool>>[];

  Future<bool> f(String param) async {
    await asynchronous(param);
    return true;
  }

  for (final List<String> subParams in partition(parameters, threadNum).toList()) {
    futures = subParams.map((String param) => f(param)).toList();
    await Future.wait(futures);
  }
}

同時実行できる数を制限して順次実行

Future<void> example4({required List<String> parameters}) async {
  const int threadNum = 3;
  int currentIndex = 0;
	
  final List<Future<bool>> futures = <Future<bool>>[];

  Future<bool> f() async {
    while (currentIndex < parameters.length) {
      final String param = parameters[currentIndex];
      currentIndex++;
      await asynchronous(param);
    }
    return true;
  }

  for (int threadIndex = 0; threadIndex < threadNum; threadIndex++) {
    futures.add(f());
  }

  Future.wait(futures);
}

参考

https://qiita.com/tonio0720/items/6f9319e4cce53256b4c9#%E5%90%8C%E6%99%82%E5%AE%9F%E8%A1%8Cconcurrently

  • この記事を書いた人
  • 最新記事

おみ

プログラミング学習やキャリアのことを発信していきます。【経歴】1999年生まれ。専門学校卒業後、大手企業やベンチャー企業でSEとして勤務。現在は某メガベンチャーでFlutterエンジニアとして働いています。

-プログラミング
-