[英]OperationQueue stop operations for a little time
我使用的是Swift 3.0.2。 Xcode 8.3.1
我嘗試使用isSuspended = true
屬性,但它不會停止操作。
當我取消一個operation1
所有其他依賴於operation1
立即啟動。
我要他們等到我告訴他們。
幫幫我吧!
編輯1:
表示它不會停止操作:
我有操作oq
和三個操作: op1
, op2
, op3
oq.addOperation(op1)
op2.addDependency(op1)
oq.addOperation(op2)
op3.addDependency(op2)
oq.addOperation(op3)
所有這三個操作都需要10秒才能執行。
添加第三次操作后,我將isSuspended = true
設置isSuspended = true
My log:
op1 started
(-- set `isSuspended` to true)
(after 10 seconds)
op2 started
(after 10 seconds)
op3 started
我以為當我將isSuspended
設置為true時,正在執行op1,就可以了。 但是為什么op2開始呢???
這是我的File.swift
:
import Foundation
class PendingOps {
// lazy var downloadInProgress = [Int: Operation]()
// current tracklist
var downloadQueue: OperationQueue {
let queue = OperationQueue()
queue.qualityOfService = .background
queue.name = "Offline queue"
queue.maxConcurrentOperationCount = 1
return queue
}
}
class op: Operation {
var nam:String = ""
init(nam: String) {
self.nam = nam
}
override func main() {
print("\(self.nam) started");
sleep(10)
print("\(self.nam) ended");
}
}
這是ViewController's
viewDidLoad()
函數:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let test = PendingOps()
let o1 = op(nam: "o1")
let o2 = op(nam: "o2")
o2.addDependency(o1)
let o3 = op(nam: "o3")
o3.addDependency(o2)
test.downloadQueue.addOperation(o1)
test.downloadQueue.isSuspended = true
print(test.downloadQueue.isSuspended)
test.downloadQueue.addOperation(o2)
test.downloadQueue.addOperation(o3)
}
計算所得的屬性downloadQueue
在每個調用上創建一個獨立隊列。 也就是說,您正在掛起第一個創建的隊列,但是第二個和第三個隊列不受影響。
要修復它,只創建一次隊列,也許在init()
class PendingOps {
var downloadQueue: OperationQueue!
init() {
let queue = OperationQueue()
queue.qualityOfService = .background
queue.name = "Offline queue"
queue.maxConcurrentOperationCount = 1
downloadQueue = queue
}
}
游樂場樣本:
class PendingOps {
var downloadQueue: OperationQueue!
init() {
let queue = OperationQueue()
queue.qualityOfService = .background
queue.name = "Offline queue"
queue.maxConcurrentOperationCount = 1
downloadQueue = queue
}
}
class op: Operation {
var nam:String = "?"
init(nam: String) {
self.nam = nam
}
override func main() {
print("\(self.nam) started");
sleep(1)
print("\(self.nam) ended");
}
}
func didLoad() {
let test = PendingOps()
let o1 = op(nam: "o1")
let o2 = op(nam: "o2")
o2.addDependency(o1)
let o3 = op(nam: "o3")
o3.addDependency(o2)
test.downloadQueue.addOperation(o1)
test.downloadQueue.isSuspended = true
print(test.downloadQueue.isSuspended)
test.downloadQueue.addOperation(o2)
test.downloadQueue.addOperation(o3)
}
didLoad()
PlaygroundPage.current.needsIndefiniteExecution = true
印刷品:
o1 started
true
o1 ended
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.