【发布时间】:2021-05-14 18:33:28
【问题描述】:
这几乎就像是我可以写一个async,将其指定为void 而不是@ 987654325@
void fetchUserOrder() async {
// Imagine that this function is fetching user info from another service or database.
await Future.delayed(Duration(seconds: 2));
print('Large Latte');
print('After Large Latte');
}
void main() async {
fetchUserOrder();
await Future.delayed(Duration(seconds: 1));
print('Fetching user order...');
print('After Fetching user order...');
}
打印:
Fetching user order...
After Fetching user order...
Large Latte
After Large Latte
这是 sooo 所以在.NET 和c++20 领域中不允许。
- 我想知道为什么
dart让async函数返回非Future? - 这会不会以有意在 API 中到处隐藏
async告终?
【问题讨论】:
-
快速评论:dart 不允许 any non-Future,它明确允许
void作为 only non-Future。 -
@nvoigt 我是 dart 的新手。谢谢你澄清。如果您知道/怀疑该设计决定背后的原因,也请发布一些答案。
-
一旦您意识到它只是
void,您也会意识到.NET与允许async void完全一样。 Dart 并不是唯一的例子。 -
@Damien_The_Unbeliever 啊。这很有道理!任务调度应不允许在外面等待。
-
如果你想要一个关于缺少
Future<void>作为async标记方法中的返回值的lint(因此是一个警告),你可以将avoid_void_async添加到分析器中。 lint 记录在这里:dart-lang.github.io/linter/lints/avoid_void_async.html
标签: dart asynchronous async-await