С помощью следующего кода Swift я пытаюсь создать задачу, которая запускается каждый час:
let queue: DispatchQueue = .main
let timer = DispatchSource.makeTimerSource(queue: queue)
timer.schedule(deadline: .now(), repeating: .seconds(3600), leeway: .milliseconds(100)
timer.setEventHandler { [weak self] in
// run code
}
Теперь, когда у меня повторяющийся набор с меньшим числом, скажем, 10 или событие 150 секунд , он срабатывает, как и ожидалось, как на переднем, так и на заднем плане (или, точнее, после того, как передний план коснется его, срабатывает, если таймер отключился в фоновом режиме). Тем не менее, когда я пропускаю время ожидания приложения на экран блокировки и жду час, оно не отображается.
Есть ли какое-то время ожидания Apple для расписаний DispatchSource? Если так, то, что это? И есть ли способ изменить или обойти это?
Редактировать
Я не хочу специальных функций, когда это фон, я хочу, чтобы код продолжал работать как нормальный и для запуска обработчика события, когда происходит тайм-аут, даже если он находится в фоновом режиме