Ваш код работает не так, как ожидалось, потому что метод, который вы даете doWhile
, не возвращает никаких Future
и поэтому может выполняться синхронно, что и будет.
Вы можете изменить код на следующий:
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:pedantic/pedantic.dart';
bool _asking = false;
String name = '';
Future main() async {
unawaited(askUserName());
}
Future askUserName() async {
_asking = true;
//feedInfoToTheUser({'info': 'enter a name'});
//print('enter the name');
unawaited(Future.doWhile(() {
if (name.isNotEmpty) {
_asking = false;
print('thank you');
exit(0);
}
return Future.value(_asking);
}));
print('wow');
}
Здесь мы возвращаем Future.value(_asking)
, которое является Future, которое будет оцениваться как другое событие в очереди событий, что делает метод doWhile
await
для этой оценки. Это делает так, что записывается wow
.
Но у вас все еще есть бесконечное l oop (поэтому загрузка ЦП высока). Но теперь это бесконечное l oop в очереди событий, которое позволяет выполнять другие вещи в очереди событий между каждым событием.