Sobes.tech
Middle

Kas saab hiljem tühistada järjekorda lisatud ülesande?

sobes.tech AI

Vastus AI-lt

Jah, see on võimalik, kui ülesanne pole veel alanud.

Operation puhul: Võite kutsuda välja meetodi cancel(). Kui operatsioon juba käib, muutub lipp isCancelled true-ks, ja arendaja peab ise selle tühistamise logikas käsitlema.

let operation = BlockOperation {
    // Operatsiooni loogika, mis peab kontrollima operation.isCancelled
    if OperationQueue.current?.isCancelled ?? false {
        print("Operatsioon tühistatud")
        return
    }
    // Edasine töö
}

let queue = OperationQueue()
queue.addOperation(operation)

// Hiljem, kui vaja, tühista
operation.cancel()

DispatchWorkItem puhul: Luuakse DispatchWorkItem eksemplar, mis seejärel saadetakse järjekorda. Tühistamiseks kutsutakse välja meetod cancel(). Nagu Operation-i puhul, on see arendajale lipp.

let item = DispatchWorkItem {
    // Ülesande loogika, mis peab kontrollima item.isCancelled
    if item.isCancelled {
        print("Ülesanne tühistatud")
        return
    }
    // Edasine töö
}

let queue = DispatchQueue.global()
queue.async(execute: item)

// Hiljem, kui vaja, tühista
item.cancel()

Juba alanud ülesande tühistamiseks on vajalik, et kood sees ülesandes kontrolliks selgelt isCancelled lippu. Kui ülesanne seda lippu ei kontrolli, jätkab see täitmist kuni lõpuni.