我有一些代码可能需要很长时间才能完成的功能。如果它花费的时间超过特定时间,我希望该功能停止继续。我该如何实现?我尝试了以下解决方案,但它并没有停止执行。
override func viewDidLoad() {
super.viewDidLoad()
let task = DispatchWorkItem {
self.myfunction()
}
DispatchQueue.main.asyncAfter(deadline: .now() + 5.0, execute: {
task.cancel()
})
task.perform()
}
func myfunction() -> Void {
/*some codes that may take long time to complete*/
}
最佳答案
试试这个
var stop:Bool!
override func viewDidLoad() {
super.viewDidLoad()
stop = false
let task = DispatchWorkItem {
self.myfunction()
}
DispatchQueue.main.asyncAfter(deadline: .now() + 5.0, execute: {
stop = true
})
task.perform()
}
func myfunction() -> Void {
if(stop)
{
// invalidate timer , break for loop or return
}
}
//Web 服务在请求中设置超时的更好方法 set request to 5 seconds timeout
let urlRequest = NSMutableURLRequest(url: newUrl! as URL, cachePolicy: .reloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 5.0)
let queue = OperationQueue()
NSURLConnection.sendAsynchronousRequest(urlRequest as URLRequest, queue: queue)
{
}
关于ios - 如何为我的长时间运行函数设置超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48029577/