определение, когда исполнитель завершает все задачи - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь написать функцию дротика, которая увеличит вес игроков и в итоге даст вам средний вес всех игроков. Я использую пакет executor, чтобы получить вес 3 игроков за один раз, а затем, как только вес игрока получен, я добавляю его в список.

Выдайте его, так как я не могу добавить await before для цикла loop, ибез ожидания кода после выполнения цикла for. В любом случае я могу как-то приостановить программу или вернуть значение только после выполнения задач исполнителя?

avgWeight(int n)async {
    List playersWeight=[];
    Executor executor = Executor(concurrency: 3);
    for (int i = 0; i < n; i++) {
//      executor.join(withWaiting: true).;
      executor.scheduleTask(() async {
        int currentPlayerWeight = await PlayerDetail(i+1).fetchPlayerWeight();
        print('courrentPlayerNo: ${i+1} currentPlayerWeight : $currentPlayerWeight ');

        if(currentPlayerWeight!=null){
          await playersWeight.add(currentPlayerWeight);
        }

      });
     await  executor.join(withWaiting:true);
      print(playersWeight);//for debugging only. this shuld be printed only when all tasks are completed. 
    }
    //playersWeight.reduce((a, b) => a + b) / playersWeight.length
  }

Отладочные операторы печати списка весов должны быть напечатаны только после завершения всех задач. если значение n равно 4, список должен быть напечатан только один раз после добавления всех 4 элементов, но для меня его печать с каждым элементом.

токовый выход

[200]
[200, 190]
[200, 190, 265]
[200, 190, 265, 255]

необходимый выход:

[200, 190, 265, 255]

Мне нужно вернуть среднюю массу, но я не могу этого сделать из-за текущей проблемы.

1 Ответ

0 голосов
/ 08 ноября 2019

Как видно из комментариев, проблема заключалась в том, что await executor.join(withWaiting:true); был внутри цикла for, но должен был быть снаружи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...