我试着编译这个简单的例子,首先Xcode 14.3(Swift 5.8)告诉我
No such module 'Concurrency'
然后,如果我将该行更改为import _Concurrency,Xcode14.3会告诉我
Cannot find 'withTimeout' in scope
使用'withDeadline()'也是如此。怎么了?
import Foundation
import Concurrency
func fetchImageData() async throws -> Data {
return try await withTimeout(1) {
// Simulate a long-running async operation
let imageData = try await URLSession.shared.data(from: URL(string: "https://example.com/image.jpg")!)
return imageData.0
}
}
1条答案
按热度按时间8iwquhpp1#
Swift并发不需要
import
任何东西,因为它是为你导入的。但是没有
withTimeout
函数。你可以写一个。或许:不用说,我用更通用的
Duration
替换了TimeInterval
(即秒),并使其成为Task
的static
方法,但总体思路很简单:基本上,为提供的闭包启动一个任务,为取消另一个任务启动另一个任务,无论哪个先完成都会取消另一个任务。显然,如果withTimeout
本身被取消,那么也要取消非结构化并发任务。但不要迷失在这杂草,因为可能有许多变化的主题,一个人可能会考虑。
你可以这样称呼它:
所有这些都已经说过了,
URLSession
/URLRequest
都已经有了一个超时参数,所以你也可以使用它,也许: