我需要进行一些API调用,并且我希望确保它们按照它们发出的顺序返回。这是发生这种情况的正确流程吗?
这是我感到困惑的地方。将最大并发操作设置为1实质上使NSOperationQueue成为同步队列,一次只调用1个操作。但是,每个操作都将进行NSURLSession调用,这是异步的。在完成第一个操作之前,如何确保下一个操作不会运行? (完成后我想将返回的JSON存储在NSArray中,将每个额外返回的JSON添加到该数组中)。
答案 0 :(得分:0)
确保NSOperation
按顺序运行的正确方法是添加依赖项。依赖关系很强大,因为它们允许在不同队列上排序不同的操作。您可以在后台队列上进行API调用或数据处理;完成后,依赖操作可以更新主线程上的UI。
let operation1 = NSBlockOperation {
print("Run First - API Call")
}
let operation2 = NSBlockOperation {
print("Run Second - Update UI")
}
operation2.addDependency(operation1)
let backgroundQueue = NSOperationQueue()
backgroundQueue.addOperation(operation1)
NSOperationQueue.mainQueue().addOperation(operation2)
// operation1 will finish before operation2 is called, regardless of what queue they're in
请在addDependency
NSOperation
maxConcurrentOperationCount = 1
点上查看Apple文档:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/NSOperation_class/index.html#//apple_ref/occ/cl/NSOperation
另外,请注意假设@Configuration
@EnableJdbcHttpSession // default session length and DB table name can be included on the annotation
public class SessionConfiguration {
// code goes here if needed
}
完成所有操作,确保一次只运行1个操作。这不能确保队列的顺序。优先级较高的操作可能会先运行。