Operation执行过程中发生了Cancel,Operation会继续执行吗?
答: Operation会继续执行,并且OnCancel回调也会执行,可以在Operation中根据Task.isCancelled来决定是否继续向下执行
let t = Task {
await withTaskCancellationHandler {
try? await Task.sleep(for: .seconds(5))
if Task.isCancelled {
print("cancel in task")
} else {
print("execute task")
}
} onCancel: {
print("cancel")
}
}
t.cancel()
// 打印:
cancel
cancel in task
Operation如果还未执行,发生了Cancel,Operation还会执行吗?
答: 不会执行
什么时候OnCancel会被触发?
答: 当Task调用cancel方法时,会立即触发OnCancel回调
let t = Task {
await withTaskCancellationHandler {
try? await Task.sleep(for: .seconds(5))
} onCancel: {
print("cancel")
}
}
t.cancel()
// 打印:
cancel
`