我运行以下代码片段并期望loadFromNetwork
和loadFromDB
并行运行。
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
Task {
async let networkData = loadFromNetwork()
async let dbData = loadFromDB()
await print("\(networkData) \(dbData)")
}
}
}
func loadFromNetwork() async -> String {
print("loadFromNetwork started \(Thread.current)")
// (0...10000000).forEach { String($0) }
sleep(3)
print("loadFromNetwork finished")
return "Network Data"
}
func loadFromDB() async -> String {
print("loadFromDB started \(Thread.current)")
// (0...10000000).forEach { String($0) }
sleep(1)
print("loadFromDB finished")
return "DB Data"
}
但我看到了这一点,loadFromNetwork
并loadFromDB
在同一个后台线程上依次运行。为什么会这样?
loadFromNetwork started <NSThread: 0x6000008d7180>{number = 3, name = (null)}
loadFromNetwork finished
loadFromDB started <NSThread: 0x6000008d7180>{number = 3, name = (null)}
loadFromDB finished
Network Data DB Data
更新
我发现这只发生在模拟器上。我在 iPhone 13 Pro Max 和 iPhone 12 Prod Max 上进行了测试。在我的 iPhone 7 设备上一切正常。我已经更新了标题。
loadFromNetwork started <NSThread: 0x2834cc080>{number = 3, name = (null)}
loadFromDB started <NSThread: 0x2834c2280>{number = 5, name = (null)}
loadFromDB finished
loadFromNetwork finished
Network Data DB Data