var maxCumulativeTime: Int32;
maxCumulativeTime = 10 * 60 * 1000;
let dispatchTimeNSEC = Int64(Double (maxCumulativeTime) * Double(NSEC_PER_MSEC))
let delayTime = DispatchTime.now() + Double(dispatchTimeNSEC) / Double(NSEC_PER_SEC)
    DispatchQueue.main.asyncAfter(deadline: delayTime) {
              doSomething()
    }

如果延迟时间很短,比如5秒,则将始终调用doSomething()。
但如果延迟时间很长,比如10分钟,doSomething()就永远不会被调用。
我一直在运行这个应用程序,从来没有杀死它。手机在10分钟的延迟时间内进入睡眠状态。但当我叫醒电话后,仍然没有打电话给doSomething。
有什么想法吗?

最佳答案

在Swift 3中,您可以简化deadline的计算-

let delayTime = DispatchTime.now() + .seconds(60 * 60 * 1000)

DispatchQueue.main.asyncAfter(deadline: delayTime) {
          doSomething()
}

不一定是你在寻找的答案,但可能有助于你接近解决方案
如果你的时间以毫秒为单位…
let delayTime = DispatchTime.now() + .milliseconds(timeValue)

关于ios - 如果延迟时间很长,iOS DispatchQueue.main.asyncAfter(deadline:delayTime)永远不会调度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42821609/

10-12 14:35