Como parar um DispatchWorkItem no GCD?

Atualmente, estou brincando comGrand Central Dispatch e descobriu uma classe chamadaDispatchWorkItem. A documentação parece um pouco incompleta, então não tenho certeza sobre como usá-la da maneira certa. Criei o seguinte trecho e esperava algo diferente. Eu esperava que o item fosse cancelado depois de ligarcancel nele. Mas a iteração continua por algum motivo. Alguma idéia do que estou fazendo de errado? O código parece bom para mim.

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

questionAnswers(2)

yourAnswerToTheQuestion