当我从Dart中标记为async的函数返回Future时会发生什么?

当我从Dart中标记为async的函数返回Future时会发生什么?,dart,dart-async,Dart,Dart Async,考虑这个例子: Future<int> doAsyncThing() => new Future.value(42); usingAsync() async => doAsyncThing(); main() { var thing = usingAsync(); // what is the runtimeType of thing ? } Future-doasynchthing()=>新的Future.value(42); usingAsync()异步

考虑这个例子:

Future<int> doAsyncThing() => new Future.value(42);

usingAsync() async => doAsyncThing();

main() {
  var thing = usingAsync();
  // what is the runtimeType of thing ?
}
Future-doasynchthing()=>新的Future.value(42);
usingAsync()异步=>doAsyncThing();
main(){
var thing=usingAsync();
//运行时类型是什么?
}

usingAsync()返回的对象的运行时类型是什么?它是
Future
还是
Future
还是其他什么?

usingAsync()
的返回类型在技术上是
动态的,因为没有为
usingAsync()
提供返回类型注释。省略返回类型注释与对返回类型注释使用
dynamic
相同

usingAsync()
返回的对象的运行时类型为
Future
。标有
async
的函数总是简单地返回
Future
对象

当来自
usingAsync()
的未来完成时,它将“展平”其包含的未来,并以
int
完成

import 'dart:async';

Future<int> doAsyncThing() => new Future.value(42);

usingAsync() async => doAsyncThing();

main() {
  var thing = usingAsync();

  // what is the runtimeType of thing ?
  print(thing.runtimeType); // Future

  thing.then((value) {
    print(value);  // 42
    print(value.runtimeType);  // int
  });
}
导入'dart:async';
Future-doAsyncThing()=>新的Future.value(42);
usingAsync()异步=>doAsyncThing();
main(){
var thing=usingAsync();
//运行时类型是什么?
打印(thing.runtimeType);//未来
然后((价值){
打印(值);//42
打印(value.runtimeType);//int
});
}
原始问题中代码示例的作者可能想写:

Future<int> usingAsync() async => await doAsyncThing();
Future usingAsync()async=>wait doasynchThing();
或者,甚至更干净:

Future<int> usingAsync() => doAsyncThing();
Future usingAsync()=>doasynchthing();
也就是说,如果函数返回一个Future,则可能不需要将函数标记为async。只要回到未来


看看它的作用:

第二个版本“Future usingAsync()=>doAsyncThing();”会自动等待吗?那么
Future doAsyncThing()async=>new Future.value(42)之间的区别是什么
未来doasynchthing()=>新的Future.value(42)?完全一样吗?