iOS DispatchQueue.main.asyncAfter(deadline:delayTime)如果delayTime很长,则永远不会调度

时间:2017-03-15 22:08:46

标签: ios swift queue delay

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()    
    }

如果delayTime很短,如5秒,则始终会调用doSomething()。 但是如果delayTime很长,比如说10分钟,doSomething()永远不会被调用。

我保持应用程序运行,永远不会杀死它。手机在10分钟的延迟时间内进入睡眠状态。但是在我拿起电话后,仍然没有打电话。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

不一定是您正在寻找的答案,但可能会帮助您更接近解决方案

如果您在几毫秒内过了一段时间......

let delayTime = DispatchTime.now() + .milliseconds(timeValue)