我在尝试取消任务时遇到了一种奇怪的行为(或者至少是我不理解的行为)。这是一个最小的示例:我有一个任务休眠 30 秒,然后递增计数器。
但是,如果我在 30 秒过去之前对该任务调用 .cancel(),则计数器会立即递增。
我本以为取消任务不会增加计数器值;有人知道这里发生了什么吗?
谢谢你!
import SwiftUI
struct ContentView: View {
@State var task: Task<Void, Never>? = nil // reference to the task
@State var counter = 0
var body: some View {
VStack(spacing: 50) {
// display counter value and spawn the Task
Text("counter is \(self.counter)")
.onAppear {
self.task = Task {
try? await Task.sleep(nanoseconds: 30_000_000_000)
self.counter += 1
}
}
// cancel button
Button("cancel") {
self.task?.cancel() // <-- when tapped before 30s, counter value …Run Code Online (Sandbox Code Playgroud)