You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中async与await使用问题:异步代码无输出排查

Swift异步代码无输出问题的原因及解决方法

问题根源

你的代码逻辑本身没有错误,核心问题是程序主线程在异步任务执行完成前就已经终止。当你调用showResults()后,主线程不会等待内部创建的Task完成,直接结束进程,导致异步代码里的打印操作根本没机会执行。

解决方案

1. 命令行/脚本环境(如Swift Playgrounds、终端运行的Swift程序)

需要让主线程等待异步任务完成,最规范的方式是使用await直接等待,修改代码如下:

func fetchHobbies() async -> [String] {
    let hobbies = ["Cars", "Photography", "Computers"]
    return hobbies
}

// 将showResults改为异步函数
func showResults() async {
    let hobbies = await fetchHobbies()
    for hobby in hobbies {
        print(hobby)
    }
}

// 主入口处等待异步任务执行完毕
await showResults()

如果需要保留原有的showResults结构(内部创建Task),也可以通过等待Task完成来实现:

func showResults() async {
    await Task {
        let hobbies = await fetchHobbies()
        print(hobbies)
    }.value
}

await showResults()

2. iOS/macOS应用环境

在常规App中,主线程会持续运行直到App退出,你的原代码其实可以正常输出。如果调试时遇到问题,检查是否是其他因素(如代码未被调用、线程优先级设置)导致,但核心逻辑本身是正确的。

补充说明

原代码没有报错是因为Task在后台并发队列执行,程序退出时不会主动等待后台任务完成,进程直接终止,因此没有任何输出或错误提示。

内容的提问来源于stack exchange,提问作者fs_tigre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 08:43:26