在 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

服務質量指定了工作的重要性,或者使用者可能會指望該任務的即時結果。

新增 OperationOperationQueue

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
}

新增多個 Operations 到 OperationQueue

Version >= 3.0

let operations = [Operation]()
// Fill array with Operations

myQueue.addOperation(operations)

調整佇列中可同時執行的 Operations 數量:

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 不會停止或取消已經執行的操作。應該只嘗試掛起你建立的佇列,而不是全域性佇列或主佇列。