Я выполняю набор задач, и чтобы распределить их по времени, я использовал 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()
}
}