Mag*_*s W 6 asynchronous future async-await dart dart-async
有没有之间的差异async方法,返回void,和一个回报Future<void>?似乎两者在 Dart 中都有效:
void main() async {
await myVoid();
await myFutureVoid();
}
void myVoid() async {
// Do something
}
Future<void> myFutureVoid() async {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
它们相同吗?
如果是这样,为什么void在例如不允许时允许int?编译器说“标记为 'async' 的函数必须具有可分配给 'Future' 的返回类型”。
jam*_*lin 17
void f()并且Future<void> f()不相同。(async关键字的存在实际上并不重要。async关键字主要允许await在函数体中使用关键字。)
void f()声明一个不返回任何内容的函数。如果它执行异步工作,那么该工作将是“即发即忘”:调用方没有机会f等待它完成。
相反,Future<void> f()声明一个函数,该函数返回Future调用者可以等待(通过使用await或注册Future.then()回调)。异步工作没有返回值,但调用者可以确定它何时完成。
标有 的函数async 通常应该返回一个Future. 如果您有一个执行异步工作并产生实际值(例如int)的函数,则调用者必须等待该值被计算后才能使用。因此,该函数必须返回 a Future。
作为一种特殊情况,async函数可以返回void而不是Future<void>指示它是即发即忘的。
| 归档时间: |
|
| 查看次数: |
1623 次 |
| 最近记录: |