正确的方法来结束异步过程

时间:2017-09-29 04:44:34

标签: ios swift swift4 dispatch-queue

所以我有这段代码:

@IBAction func onStart(_ sender: Any) {
    DispatchQueue(label: "SyncQueue").async{
        for i in 0..<numberOfItemToDownload {
            // download data from the internet this may takes longer depends on the connection speed and data being download
            if isCancelled {
                DispatchQueue.main.async { // dismiss the progress ViewController (displayed modally) }
                break
            }
        }
    }
}

@IBAction func onEnd(_ sender: Any) {
        isCancelled = true
}

这样可行,但如果当前正在下载的项目花费的时间更长,那么用户可以点击“结束”#34;按下&#34;进度对话框&#34;在当前项目完成之前不会被解雇。这使得&#34; End&#34;按钮无法在用户的视角中工作。

在Android中,我们可以中断AsyncTask进程并结束它。还有另一种方法可以在Swift中完成吗?比如当用户点击&#34;结束&#34;该过程应立即停止并关闭&#34;进度对话框&#34;。

1 个答案:

答案 0 :(得分:1)

GDC不容易取消。

使用NSOperation子类,您可以轻松快速地取消。