如何正确编写串行执行3个异步函数的代码以消除编译警告
如何正确编写串行执行3个异步函数的代码以消除编译警告
我来帮你分析问题根源,然后给出符合需求的正确写法~
首先,你代码里的try await [one, two, three]这一行完全是多余的,这也是三个编译警告的来源:
- No calls to throwing functions occur within try expression:你的三个异步函数都没有声明为
throws类型,根本不需要用try关键字包裹; - No async operations occur within await expression:
one、two、three是已经通过await获取到的Void类型结果,这个数组本身没有任何异步操作,用await等待它毫无意义; - Expression of type [()] is unused:你创建了这个Void数组,但完全没有使用它,编译器自然会提示它是无用表达式。
而你真正需要的串行执行逻辑,其实已经通过前面的三行await实现了——await关键字本身就会阻塞当前Task的执行流程,直到对应的异步函数完成,所以顺序执行await func1()、await func2()、await func3()就已经是严格的串行执行了,完全不需要后面多余的数组操作。
修正后的代码如下:
Task { await func1() await func2() await func3() } func func1() async { ... } func func2() async { ... } func func3() async { ... }
如果之后你的函数需要支持抛出错误(比如JSON解码失败时抛出错误),只需要把函数声明改为async throws,然后用do-catch块处理错误即可,同样保持串行逻辑:
Task { do { try await func1() try await func2() try await func3() } catch { // 在这里处理错误,比如打印错误信息或提示用户 print("执行出错:\(error.localizedDescription)") } } func func1() async throws { ... } func func2() async throws { ... } func func3() async throws { ... }
这样写既满足了你“每个函数完成后再执行下一个”的需求,也完全消除了所有编译警告。
备注:内容来源于stack exchange,提问作者user1233894
相关产品推荐
相关产品推荐

