返回void与返回Future <void>有什么区别?

时间:2019-05-21 18:00:35

标签: asynchronous dart async-await future dart-async

返回async的{​​{1}}方法和返回void的方法之间有区别吗?似乎两者在Dart中都是有效的:

Future<void>

它们相同吗?

如果是这样,为什么在不允许void main() async { await myVoid(); await myFutureVoid(); } void myVoid() async { // Do something } Future<void> myFutureVoid() async { // Do something } 的情况下允许void?编译器说“标记为'async'的函数必须具有可分配给'Future'的返回类型”

1 个答案:

答案 0 :(得分:1)

void f()Future<void> f()不同。 (实际上,async关键字的存在并不重要。async关键字主要用于在函数体中使用await关键字。)

void f()声明一个不返回任何内容的函数。如果它完成异步工作,则该工作将“即兴即忘”:f的调用者没有机会等待它完成。

相反,Future<void> f()声明一个函数,该函数返回调用方可以等待的Future(通过使用await或注册Future.then()回调)。异步工作没有返回任何值,但是调用者可以确定何时完成。

通常用async标记的功能 应该返回一个Future。如果您有一个执行异步工作并产生实际值的函数(例如int),则调用方必须等待该值被计算后才能使用。因此,该函数必须返回Future

在特殊情况下,async函数可以返回void而不是Future<void>来表明它是即发即弃。