这是异步行为吗?
is this asynchronous behaviour?
为什么下面的程序不打印'wow',这是dart的异步行为吗?我在这段代码中遗漏了什么?
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:pedantic/pedantic.dart';
bool _asking = false;
String name = '';
Future main() async {
askUserName();
}
Future askUserName() async {
_asking = true;
//feedInfoToTheUser({'info': 'enter a name'});
//print('enter the name');
Future.doWhile(() {
if (name.isNotEmpty) {
_asking = false;
print('thank you');
exit(0);
}
return _asking;
});
print('wow');
}
您的代码未按预期工作,因为您提供的方法 doWhile
未 returning 任何 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');
}
这里我们 return Future.value(_asking)
这是一个 Future,它将被评估为事件队列中的另一个事件,这使得 doWhile
方法 await
用于此评估。这样就写成wow
。
但是你仍然有一个无限循环(所以 CPU 使用率很高)。但它现在是事件队列上的无限循环,允许在每个事件之间在事件队列上执行其他内容。
为什么下面的程序不打印'wow',这是dart的异步行为吗?我在这段代码中遗漏了什么?
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:pedantic/pedantic.dart';
bool _asking = false;
String name = '';
Future main() async {
askUserName();
}
Future askUserName() async {
_asking = true;
//feedInfoToTheUser({'info': 'enter a name'});
//print('enter the name');
Future.doWhile(() {
if (name.isNotEmpty) {
_asking = false;
print('thank you');
exit(0);
}
return _asking;
});
print('wow');
}
您的代码未按预期工作,因为您提供的方法 doWhile
未 returning 任何 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');
}
这里我们 return Future.value(_asking)
这是一个 Future,它将被评估为事件队列中的另一个事件,这使得 doWhile
方法 await
用于此评估。这样就写成wow
。
但是你仍然有一个无限循环(所以 CPU 使用率很高)。但它现在是事件队列上的无限循环,允许在每个事件之间在事件队列上执行其他内容。