我有一个应用程序具有一些运行时间较长的生成报告的过程-这些过程可能需要5到10分钟才能运行,但是一旦用户切换到另一个应用程序,报告过程就会暂停。同样,如果用户锁定Mac,则该应用会停止处理。
发生了什么事?这是macOS的一项新功能吗-我当时印象中进程将继续使用空闲CPU时间运行-如果没有其他应用程序在运行,这将是大部分CPU时间。
我已经尝试了所有节电和安全设置,但都没有用。是的,Mac已插入主电源。
[确定,似乎答案是将代码包装在下面,以使OS知道您希望在应用程序后台运行或锁定屏幕打开时继续进行处理。
DispatchQueue.global().async {
let thisActivity = ProcessInfo.processInfo.beginActivity(options: .userInitiated, reason: "Batch processing user report")
// Do stuff here
// e.g.
let operation = Operation()
let queue = DispatchQueue()
queue.addOperation(operation)
queue.waitUntilAllProcessesAreFinished()
//...
ProcessInfo.processInfo.endActivity(thisActivity)
}
我还没有测试所有选项,以查看它们是否都可以工作,但是'.userInitiated'一直运行到完成为止,并且不会阻止用户将系统置于睡眠状态。其他选项的行为可能有所不同。