概述
async与await是基于事件循环的单线程异步模型,并不是多线程,因此耗时的操作依然会导致该线程阻塞。
下面的两个示例,是我比较疑惑的地方,与预期的结果不同。
现在已经搞清楚啦,但还是保留此文。最初以为await functionB()会直接返回执行上一级函数functionA(),然而实际是先顺序执行functionB()中的代码,直到functionB()结束或者functionB()中也有await,然后才会返回执行上一级函数functionA()。
async与await示例(1)
先来看以下测试代码。
void TestDart() async{ TestAwait1(); print("TestAwait1 running"); } void TestAwait1() async{ print("TestAwait1 begin"); await sleep(const Duration(seconds: 2)); print("TestAwait1 A"); }
输出结果:
I/flutter ( 4720): TestAwait1 begin
(2秒后)I/flutter ( 4720): TestAwait1 running
I/flutter ( 4720): TestAwait1 A
修改一下代码,第二行增加await
后
void TestDart() async{ await TestAwait1(); print("TestAwait1 running"); } void TestAwait1() async{ print("TestAwait1 begin"); await sleep(const Duration(seconds: 2)); print("TestAwait1 A"); }
输出结果
I/flutter ( 4720): TestAwait1 begin
(2秒后)I/flutter ( 4720): TestAwait1 A
I/flutter ( 4720): TestAwait1 running
能够发现输出结果的后两条顺序相反。
async与await示例(2)
先来看以下测试代码。
void TestDart() async{ CreateTestAwait2(); print("create running"); } void CreateTestAwait2(){ TestAwait2(); print("CreateTestAwait2 running"); } TestAwait2() async{ await sleep(const Duration(seconds: 2)); print("TestAwait2 running"); }
输出结果
(等待2秒)
I/flutter ( 4720): CreateTestAwait2 running
I/flutter ( 4720): create running
I/flutter ( 4720): TestAwait2 running
修改一下代码,增加await "";
void TestDart() async{ CreateTestAwait2(); print("create running"); } void CreateTestAwait2(){ TestAwait2(); print("CreateTestAwait2 running"); } TestAwait2() async{ await ""; await sleep(const Duration(seconds: 2)); print("TestAwait2 running"); }
输出结果
I/flutter ( 4720): CreateTestAwait2 running
I/flutter ( 4720): create running
(等待2秒)
I/flutter ( 4720): TestAwait2 running
能够发现等待2秒的时间点不一样。