Асинхронная функция языка программирования Dart не работает должным образом - PullRequest
0 голосов
/ 07 января 2019

Я не мог понять, почему следующий код не работает правильно. Я также попробовал это на DartPad. Результат тот же.

import 'dart:async';

Future<bool> longWait(String prefix) async {
  for (int i = 0; i < 5; i++) {
    print('$prefix $i');
  }
  return true;
}

Future testAsync() async {
  print('starting');
  longWait('Async');
  print('done');
}

main(List<String> arguments) {
  testAsync();
}
the result is:
starting
Async 0
Async 1
Async 2
Async 3
Async 4
done

but it has to be this:
starting
done
Async 0
Async 1
Async 2
Async 3
Async 4

1 Ответ

0 голосов
/ 07 января 2019

Поскольку код синхронизации Dart 2 в начале асинхронных функций выполняется, синхронизация.
В Dart 1 все было иначе.

Обходной путь будет

Future<bool> longWait(String prefix) async {
  await Future.microtask((){});

  for (int i = 0; i < 5; i++) {
    print('$prefix $i');
  }
  return true;
}

Код после await выполняется асинхронно и приводит к желаемому поведению. (проверено в DartPad)

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