У меня есть этот код на игровой площадке для iOS, XCode v15.3:
import Foundation
import PlaygroundSupport
func fetchWeatherHistory() async -> [Double] {
(1...100).map { _ in Double.random(in: -10...30) }
}
func calculateAverageTemperature(for records: [Double]) async -> Double {
let total = records.reduce(0, +)
let average = total / Double(records.count)
return average
}
func upload(result: Double) async -> String {
"OKet"
}
func processWeather() async throws {
var records = await fetchWeatherHistory()
var average = await calculateAverageTemperature(for: records)
var response = await upload(result: average)
print("Server response: \(response)")
return
}
do {
try await processWeather()
} catch let error {
print(error.localizedDescription)
}
Я получаю этот вывод (вместе с ошибкой:
Server response: OKet
Playground execution failed:
error: execution stopped with unexpected state.
error: Execution was interrupted.
The process has been left at the point where it was interrupted, use "thread return -x" to return to the state before expression evaluation.
в чем ошибка, ты знаешь? И как это исправить?





Вам нужно сообщить Playgrounds, что вы выполняете асинхронную работу, установив NeedsIndefiniteExecution на true и вызвав FinishExecution, когда вы закончите.
PlaygroundPage.current.needsIndefiniteExecution = true
do {
try await processWeather()
} catch let error {
print(error.localizedDescription)
}
PlaygroundPage.current.finishExecution()
это сработало прекрасно.
Почему игровая площадка будет работать достаточно долго, чтобы ваш код завершился? И тебе действительно разрешено вот так говорить
awaitпосреди ниоткуда? Я ожидаю увидеть задачу на вершине асинхронной цепочки. — Действительно, на вашем месте я бы вообще не пытался использовать async/await на игровой площадке.