这是异步行为吗?

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 使用率很高)。但它现在是事件队列上的无限循环,允许在每个事件之间在事件队列上执行其他内容。