Я хочу знать, возможно ли приостановить, а затем возобновить рабочий элемент в главной очереди, сохраняя при этом время «.asyncAfter».Если нет, есть ли обходной путь для достижения этой цели?
В определенный момент я ставлю в очередь следующий DispatchWorkItem:
dispatchWorkItem = DispatchWorkItem(qos: .userInteractive, block: {
self.view.backgroundColor = UIColor.workoutBackgroundColor
self.runTimer()
self.timerButton.animateableTrackLayer.removeAnimation(forKey: "strokeEndAnimation")
self.isRestState = false
})
Я ставлю это в очередь, используя:
DispatchQueue.main.asyncAfter(deadline: delayTime, execute: self.dispatchWorkItem))
(delayTime является параметром для функции)
Теперь проблема, с которой я сталкиваюсь, заключается в том, как я могу приостановить этот рабочий элемент, если пользователь выполняет действие «пауза» в моем приложении.
Я пытался использовать метод DispatchQueue.main.suspend()
, но рабочий элемент продолжает выполняться после указанного времени задержки.Из того, что я прочитал, этот метод должен приостановить очередь и этот рабочий элемент из очереди, поскольку он не выполняется.(Пожалуйста, исправьте меня, если я ошибаюсь!)
Мне нужно добиться, чтобы рабочий элемент был «приостановлен», пока пользователь не выполнит действие «возобновить» в приложении, которое возобновит рабочий элемент, откудавремя задержки остановилось.
Это работает с фоновыми очередями, которые я создал, когда мне не нужно обновлять пользовательский интерфейс;тем не менее, в основной очереди, кажется, происходит сбой.
Один из обходных путей, который я рассмотрел, - это когда пользователь выполняет действие паузы, сохраняя время, оставшееся до выполнения рабочего элемента, и повторно добавляя работу.элемент в очередь с указанным временем действия возобновления.Это выглядит как некачественный подход, и я чувствую, что для этого есть более подходящий метод.
На этом, возможно ли создать фоновую очередь, которая при выполнении выполняет рабочий элемент в главной очереди?
Заранее спасибо!