void task() async {
print("working...");
sleep(Duration(seconds: 4));
print("done");
}
当我这样奔跑时:
task();
task();
task();
我得到了结果:
working...
done
working...
done
working...
done
我的预期结果是:
working working working done done done
当我更改
sleep(Duration(seconds: 4));
到
awiat Dio().get("xxx.xx.xx.xx");
它按我的预期工作。 为什么即使我将它放在异步函数中,睡眠仍然会停止主线程? 我对aysnc的工作方式感到困惑,当一个函数被标记为异步函数时,我会一直不知所措,如果不使用await,它将异步执行。
答案 0 :(得分:0)
在Dart 2中,异步函数将同步执行,直到遇到第一次等待或返回。由于您的task()函数都没有,因此代码将同步运行,进入休眠状态并暂停4秒钟,然后再继续。如果将await添加到睡眠中,则将获得预期的输出。但是,由于睡眠受到阻碍,每次打印“工作中...”之间仍然会有四秒钟的延迟。
void task() async {
print("working...");
await sleep(Duration(seconds: 4));
print("done");
}
Dart文档中有一个关于异步和等待的有用部分:
答案 1 :(得分:0)
为什么即使我将其置于异步函数中,睡眠仍会停止主线程?
sleep
的全部重点是暂停执行。 sleep
是阻止呼叫:
请谨慎使用,因为在睡眠调用中被阻塞时,无法单独处理异步操作。
您可能想在测试中使用Future.delayed
。
请注意,在执行await
之前,还必须在函数中使用Future
来使执行 产生并等待print("done")
完成。