остановите dispatchquene (). asyn c в l oop глобально, используя swift - PullRequest
0 голосов
/ 04 марта 2020
override func viewDidLoad() {
  super.viewDidLoad()    
            worktask = DispatchWorkItem {
                   for i in 1…4 {
                         sleep(2)
                          DispatchQueue.main.async {
                                 // run code
                                 fucntionAlert()
                           }
                   }
             }
            DispatchQueue.global().async(execute: worktask)
    }
    func fucntionAlert(){   
            let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default) {
                DispatchQueue.global().sync {
                            self.worktask.cancel()
                 }
            }
    }

    @IBAction func action(_sender: Any){
            DispatchQueue.global().sync {
                 self.worktask.cancel()
            }
    }

Я пытаюсь запустить dispatchqueue 4 раза, каждый запускается через 2 секунды. Как таймер. Я не хочу использовать таймер, потому что у меня уже работает таймер в приложении uiapplication.

Теперь я пытаюсь остановить диспетчерскую очередь при переходе к следующему контроллеру представления или нажатии кнопки ОК. Это все еще работает и никогда не останавливается. Любое решение?

Мне нужно остановить при переходе к следующему контроллеру представления и запускается снова при возврате к myviewcontroller. спасибо!

1 Ответ

0 голосов
/ 04 марта 2020

Попробуйте этот код ниже.

    worktask = DispatchWorkItem { [weak self] in
        for i in 1...4 {
            sleep(2)
            if self?.worktask?.isCancelled ?? true {
                break
            }
            DispatchQueue.main.async {
            }
        }
    }
...