環境:Swift 5、Xcode 14、iOS 15、UIKit(不是 SwiftUI)
我有一個長時間運行的異步任務,我在任務塊中執行:
Task { () -> () in
do {
for z in arrayData{
if killTask { // an external property
try Task.cancel() // **Swift Errors here**
}
let x1 = try await self.longTask1(z.var1)
let x2 = try await self.longTask2(z.var2)
etc.
}
} catch { print("Bad") }
} // end task
這會因 Swift 語法錯誤而失敗,無法推斷任務中的成功和失敗。Task 不產生 Result 型別。有人可以指出我可以通過外部信號量條件取消任務(沒有輸入/輸出/結果型別)的正確方向嗎?
uj5u.com熱心網友回復:
killTask您可以保存Task稍后可以保存的屬性,而不是引入屬性cancel。
所以你會有一個屬性:
var task: Task<Void, Error>?
和
task = Task {
for z in arrayData {
try Task.checkCancellation()
let x1 = try await self.longTask1(z.var1)
let x2 = try await self.longTask2(z.var2)
...
}
}
然后
task?.cancel()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/524219.html
