Swift服务端异步Task中print无输出问题求助
Swift服务端Async Task内无print输出的问题解决
你的代码核心问题是:同步的main()函数执行完毕后,程序直接退出,导致你创建的后台Task还没来得及执行就被终止了,所以看不到"Test print2"的输出。
解决方法
方法1:将main函数改为异步(推荐)
Swift支持异步的main方法,修改后让主线程等待异步任务完成:
@main struct PostgresTest { static func main() async { print("Test print1") // 等待Task内的异步代码执行完成 await Task { print("Test print2") await TestPostgres.connectDisconnect() }.value } }
这样程序会等到Task里的所有代码执行完毕后才会退出,终端就能正常输出"Test print2"。
方法2:手动阻塞主线程(仅作临时测试)
如果暂时不想修改main的异步属性,可以在main函数末尾添加阻塞逻辑,让主线程不立即退出:
@main struct PostgresTest { static func main() { print("Test print1") Task { print("Test print2") await TestPostgres.connectDisconnect() // 任务完成后主动退出程序 exit(0) } // 阻塞主线程,等待异步任务完成 RunLoop.main.run() } }
这种方法依赖RunLoop,仅适合临时验证,服务端开发更推荐使用异步main的标准写法。
内容的提问来源于stack exchange,提问作者Tomm P
相关产品推荐
相关产品推荐

