¿Cómo detener un DispatchWorkItem en GCD?

Actualmente estoy jugando conGrand Central Dispatch y descubrí una clase llamadaDispatchWorkItem. La documentación parece un poco incompleta, así que no estoy seguro de usarla de la manera correcta. Creé el siguiente fragmento y esperaba algo diferente. Esperaba que el artículo se cancelara después de llamarcancel en eso. Pero la iteración continúa por alguna razón. ¿Alguna idea de lo que estoy haciendo mal? El código me parece bien.

@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()
    }
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta