在 OperationQueue 中运行任务
你可以将 OperationQueue
视为一系列等待执行的任务。与 GCD 中的调度队列不同,操作队列不是 FIFO(先进先出)。相反,只要有足够的系统资源允许,它们就会在准备好执行任务后立即执行。
得到主要的 OperationQueue
:
Version >= 3.0
let mainQueue = OperationQueue.main
创建自定义 OperationQueue
:
Version >= 3.0
let queue = OperationQueue()
queue.name = "My Queue"
queue.qualityOfService = .default
服务质量指定了工作的重要性,或者用户可能会指望该任务的即时结果。
添加 Operation
到 OperationQueue
:
Version >= 3.0
// An instance of some Operation subclass
let operation = BlockOperation {
// perform task here
}
queue.addOperation(operation)
添加块到 OperationQueue
:
Version >= 3.0
myQueue.addOperation {
// some task
}
添加多个 Operation
s 到 OperationQueue
:
Version >= 3.0
let operations = [Operation]()
// Fill array with Operations
myQueue.addOperation(operations)
调整队列中可同时运行的 Operation
s 数量:
myQueue.maxConcurrentOperationCount = 3 // 3 operations may execute at once
// Sets number of concurrent operations based on current system conditions
myQueue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount
挂起队列将阻止它开始执行任何现有的,未启动的操作或添加到队列的任何新操作。恢复此队列的方法是将 isSuspended
设置回 false
:
Version >= 3.0
myQueue.isSuspended = true
// Re-enable execution
myQueue.isSuspended = false
暂停 OperationQueue
不会停止或取消已经执行的操作。应该只尝试挂起你创建的队列,而不是全局队列或主队列。