Async let 实现无结果并行调用:任务执行与消除警告疑问
问题解答
1. 不使用await能否确保所有调用执行且不被取消?
不能。async let声明的异步任务不会自动启动,只有当你对其调用await时才会开始执行。如果makeCalls函数中没有任何await语句,函数执行完毕后会立即退出,这些未被等待的异步任务会被系统直接取消,根本不会运行。要确保所有任务执行完成,必须通过await等待它们结束。
2. 如何消除未使用变量的警告?
直接用async let _ = ...会触发编译器错误,因为async表达式必须配合await使用。可以通过以下两种合法方式消除警告:
方式一:打包成元组一次性等待
将所有async let变量打包成元组,用_ = await忽略返回值,既确保任务执行,又消除未使用警告:
func makeCalls() async { async let a = callA() async let b = callB() async let c = callC() _ = await (a, b, c) }
方式二:单独await每个变量并忽略返回值
分别对每个async let变量执行await,用下划线接收返回值:
func makeCalls() async { async let a = callA() async let b = callB() async let c = callC() _ = await a _ = await b _ = await c }
两种方式都能保证三个任务并行执行,且不会出现未使用变量的警告。其中方式一更简洁,推荐使用。
内容的提问来源于stack exchange,提问作者David Schmoecker
相关产品推荐
相关产品推荐

