使用 swift 在全局循环中停止 dispatchquene().async

stop dispatchquene().async in loop globally using swift

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

我正在尝试 运行 调度队列 4 次,每次都在 2 秒后启动。像定时器。 我不想使用计时器,因为我已经在 uiapplication 中 运行ning 了计时器。

现在我试图在移动到下一个视图控制器或单击确定按钮时停止调度队列。它仍然 运行永不止步。有什么解决办法吗?

我需要在移动到下一个视图控制器时停止,并在 return 到 myviewcontroller 时再次启动。谢谢!

试试下面的代码。

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