Wie stoppe ich ein DispatchWorkItem in GCD?

Ich spiele gerade mitGrand Central Dispatch und entdeckte eine Klasse namensDispatchWorkItem. Die Dokumentation scheint ein wenig unvollständig zu sein, daher bin ich mir nicht sicher, ob ich sie richtig verwenden soll. Ich habe das folgende Snippet erstellt und etwas anderes erwartet. Ich habe erwartet, dass der Artikel storniert wird, nachdem ich @ angerufen habcancel drauf. Aber die Iteration wird aus irgendeinem Grund fortgesetzt. Irgendwelche Ideen, was ich falsch mache? Der Code scheint in Ordnung für mich.

@IBAction func testDispatchItems() {
    let queue = DispatchQueue.global(attributes:.qosUserInitiated)
    let item = DispatchWorkItem { [weak self] in
        for i in 0...10000000 {
            print(i)
            self?.heavyWork()
        }
    }

    queue.async(execute: item)
    queue.after(walltime: .now() + 2) {
        item.cancel()
    }
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage