Asynchronous 在Dart中将方法引用作为异步调用传递
是否可以将Asynchronous 在Dart中将方法引用作为异步调用传递,asynchronous,dart,Asynchronous,Dart,是否可以将async方法作为Dart中的async调用传递 例如,如果我想简化此代码: 。。。 void myFunc()异步{ 等待myLib.work(); } ... 升起的按钮( onPressed:()异步{await myFunc();}, ) 为此: 。。。 void myFunc()异步{ 等待myLib.work(); } ... 升起的按钮( onPressed:myFunc, ) 将myFunc作为引用传递,并且仍然保持每次作为回调从onPressed调用myFunc时
async
方法作为Dart中的async
调用传递
例如,如果我想简化此代码:
。。。
void myFunc()异步{
等待myLib.work();
}
...
升起的按钮(
onPressed:()异步{await myFunc();},
)
为此:
。。。
void myFunc()异步{
等待myLib.work();
}
...
升起的按钮(
onPressed:myFunc,
)
将
myFunc
作为引用传递,并且仍然保持每次作为回调从onPressed
调用myFunc
时,它将是一个异步调用。简言之:是。您展示的两段代码几乎完全相同。调用myLib.work
并在调用的异步计算完成时完成未来。
你也可以这样写:
RaisedButton(
onPressed: myLib.work,
)
它仍然会做同样的事情
然而,我不能绝对肯定我理解你所说的“异步调用”是什么意思
Dart函数对象不分为异步函数和非异步函数,它们的调用方式不同。它们可以分为返回的Future
s和不返回的s,但您可以用相同的方式调用它们。我假设myLib.work
返回一个Future
。然后,您可以选择等待结果,但这不是调用的一部分
调用函数本身并不是异步的,它总是同步的——它在计算继续之前返回一个值。该值可能是未来的
,在异步计算完成后将完成,但函数将同步返回
因此,当您将void Function()
方法绑定到onPressed
事件时,它最终将调用该函数,忽略返回值,并同步继续
如果该函数是myLib.work
,则它调用myLib.work
,并忽略返回的Future
。当work
的异步工作完成时,它将完成返回的未来,没有人会注意到
如果函数是myFunc
,那么它会调用myFunc
,它会立即调用myLib.work
,并记住返回的未来。然后myFunc
同步返回一个新的Future
(被忽略),并开始等待myLib.work
返回的Future(因为wait
)。当该future完成时,wait
完成,然后myFunc
主体完成,最后新的future
也完成。同样,没有人注意到
如果函数是()async=>wait myFunc()
,则调用该函数。它立即调用myFunc
,它立即调用myLib.work
,它返回一个myFunc
开始等待的Future
,然后返回一个Future
,函数表达式开始等待,然后返回一个Future
,然后将其忽略。
最终所有这些功能都完成了,没有人注意到
“如果一个未来完成了,没有人在听,它会成为一个事件吗?”Hmm。。。。我想我的整个困惑是因为缺少关于
Future
s的文档,这些文档不是等待的,只是创建的,留给事件循环来处理它们。我看到的所有文档都有一个wait
或then
。