我正在执行一组任务,为了随着时间的推移跨越它们,我使用Thread.sleep(forTimeInterval: ... )
了它在执行之间添加了暂停。
然后,在主屏幕上我有控制器,可以干预线程执行,所以当控制器应用时我想取消睡眠。并从用户选择的地方开始。所以,我已经尝试过
Thread.exit()
了 - 它以错误终止程序。
如何退出(或刷新)当前线程并从我想要的地方开始?按钮(即控制器)控制线程暂停的方法有哪些?
实际发生的是,如果我取消,它会继续从同一个地方运行......
let queue = DispatchQueue(label: "Actions Queue")
let delay: Double = 5
var actions = ["action 1", "action 2", "action 3", "action 4", "action 5"]
// every time task finishes, it calls for the following task (with delay)
queue.sync {
// sets an interval, that continues an action
Thread.sleep(forTimeInterval: TimeInterval(delay))
// continue an action
}
// heres how I've tried in main view, but it doesn't work
queue.sync {
Thread.current.cancel()
}
编辑:
例如,cancel()
这里做什么?以及为什么exit()
不能应用于Thread.current
,而只能应用于Thread.
“您可以使用这些语义来取消线程的执行或确定线程是否仍在执行或已完成其任务”。好吧,如果我cancel()
. 什么,然后会重新开始?
queue.sync {
Thread.sleep(forTimeInterval: TimeInterval(10.0))
// do something
}
Button("...") {
queue.sync {
Thread.current.cancel()
}
}