问题描述
我是Dart的新手。我从一些文章和文档(例如this article)中了解到:
-
async/await
使用与Future
相同的机制,即FIFOEvent Loop
。 -
Event Loop
在执行main()
之后启动。 -
async
函数同步运行 直到第一个await
关键字。然后他们暂停执行,然后执行返回到调用堆栈中的上一个函数。 - 剩余的代码包装到
Future
并排队到Event Loop
(对我来说最不确定的地方)。
基于这些观点,我期望以下代码:
main() {
Future(() => print("1"));
Future(() {
print("2");
asyncFunc("2");
});
Future(() => print("3"));
print("main");
asyncFunc("main");
print("\nEvent loop starts?\n");
}
asyncFunc(String from) async {
print("start [from $from]");
await (() async => print("middle [from $from]"))();
print("end [from $from]");
}
执行 main()后将创建与此事件队列类似的内容:future1
-> future2
-> future3
-> end_from_main
在执行future2
之后,事件end_from_future2
将被排到最后:future1
-> future2
-> future3
-> end_from_main
-> end_from_future2
所以我期望的结果输出应该是:
main
start [from main]
middle [from main]
Event loop starts?
1
2
start [from 2]
middle [from 2]
3
end [from main]
end [from 2]
但实际上它返回:
main
start [from main]
middle [from main]
Event loop starts?
end [from main]
1
2
start [from 2]
middle [from 2]
end [from 2]
3
所以我得出的结论是:async/await
个事件都比Fututre
具有优先级。他们都使用与EventLoop
无关的差异机制。也许我几乎误会了一些东西。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)