Sobes.tech
Middle

iOS'ta senkron görevlerin yürütülmesini nasıl iptal edebilirsiniz?

sobes.tech yapay zeka

AI'dan gelen yanıt

İş parçacıklarının doğrudan iptal edilmesi (mevcut akışı engelleyen) ve akışın yürütülmesini durdurmadan mümkün değildir.

Senkron bir görevi iptal etmeyi taklit etmek için aşağıdaki yaklaşımları kullanabilirsiniz:

  1. İptal bayrağının düzenli kontrolü: Senkron görevin mantığına, dışarıdan iptal gerektiğinde ayarlanan bir boolean bayrağı kontrolü ekleyin. Bayrak ayarlandıysa, görev erken sona erer.

    var isCancelled = false
    
    func performSynchronousTask() {
        // Görevin başlangıcı
        for i in 0..<100000 {
            if isCancelled {
                print("Görev iptal edildi")
                return // Erken çıkış
            }
            // İşin bir bölümünü yürütme
            // ... uzun hesaplamalar veya işlemler
        }
        print("Görev tamamlandı")
    }
    
    func cancelTask() {
        isCancelled = true
    }
    
    // Kullanım örneği
    // performSynchronousTask() // Senkron çağrı
    // cancelTask() // Diğer bir akıştan iptal etmek için çağrılır
    
  2. try? Task.checkCancellation() kullanımı (asenkron bağlamda): Eğer senkron görev, Swift Concurrency içindeki Task içinde yürütülüyorsa, düzenli olarak try? Task.checkCancellation() çağrılabilir. İptal durumunda, bu çağrı CancellationError fırlatır.

    func performCancellableSynchronousWork() throws {
        for i in 0..<100000 {
            try Task.checkCancellation() // İptal kontrolü
            // İşin bir bölümünü yürütme
            // ...
        }
    }
    
    // Asenkron bağlamda kullanım örneği
    /*
    let task = Task {
        do {
            try performCancellableSynchronousWork()
            print("Görev tamamlandı")
        } catch is CancellationError {
            print("Görev iptal edildi")
        } catch {
            print("Bir hata oluştu: \(error)")
        }
    }
    
    // Görevi iptal etmek için
    // task.cancel()
    */