环境:Swift 5,Xcode 14,iOS 15,UIKit(NOT SwiftUI)
我有一个长时间运行的异步任务,我在Task块中执行:
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语法错误而失败,即无法推断任务中的成功和失败。任务不产生Result类型。有人能告诉我正确的方向吗?我可以通过外部信号量条件取消任务(没有输入/输出/结果类型)?
2条答案
按热度按时间j5fpnvbx1#
不需要引入
killTask
属性,您可以保存Task
,稍后可以保存cancel
。你会有一个属性:
以及
后来呢
4ngedf3f2#
如果您正在生成多个非结构化任务,为了管理它们并处理它们的取消,您可以使用
TaskGroup
和withTaskCancellationHandler
创建自己的取消处理构造,类似于Kotlin中的CoroutineScope和C#中的CancellationToken。