Flutter에서 비동기식 처리를 여러 개 수행할 때의 4가지 실행 모드

15246 단어 FlutterDarttech
Flutter에서 여러 비동기 처리를 수행할 때의 실행 패턴은 네 가지로 요약되었다.
  • 직렬 실행(10→1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
  • 여러 개의 병렬 실행을 취합(10→3, 3, 1)
  • 한 번에 실행(10→10)
  • 동시에 실행할 수 있는 상한선을 제한하고 병행 실행(10→3 처리가 끝난 후 기다리는 처리를 실행)
  • 비동기 처리
    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> 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> 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> 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#conclurently를 동시에 실행합니다

    좋은 웹페이지 즐겨찾기