NSOperationQueue有waitUntilAllOperationsAreFinished,但我不想同步等待它.我只想在队列完成时隐藏UI中的进度指示器.
实现这一目标的最佳方法是什么?
我不能发送来自我NSOperation的通知,因为我不知道哪一个会是最后一个,并且[queue operations]在收到通知时可能不会是空的(或者更糟糕的是 - 重新填充).
我需要向Grand Central Dispatch发送多个任务才能运行.有些任务会先完成,有些则最后完成.
我怎么知道Grand Central Dispatch的所有任务完成了?
我应该使用计数器记录完成的任务数量吗?任何更聪明的方法?
我有以下代码:
func testFunc(completion: (Bool) -> Void) {
let queue = NSOperationQueue()
queue.maxConcurrentOperationCount = 1
for i in 1...3 {
queue.addOperationWithBlock{
Alamofire.request(.GET, "https://httpbin.org/get").responseJSON { response in
switch (response.result){
case .Failure:
print("error")
break;
case .Success:
print("i = \(i)")
}
}
}
//queue.addOperationAfterLast(operation)
}
queue.waitUntilAllOperationsAreFinished()
print("finished")
}
Run Code Online (Sandbox Code Playgroud)
输出是:
finished
i = 3
i = 1
i = 2
Run Code Online (Sandbox Code Playgroud)
但我希望以下内容:
i = 3
i = 1
i = 2
finished
Run Code Online (Sandbox Code Playgroud)
那么,为什么queue.waitUntilAllOperationsAreFinished()不等待?