所以,我有一组当前一起运行的ASINetworkQueues,导致数据库保存时出现竞争条件。我正在尝试创建一个NSOperationQueue,它将对这些“子队列”中的每一个进行排队。我目前用一个主方法创建了一个NSOperation,它启动了“子队列”以开始下载。
我的问题是,每次使用“addOperation”将子队列添加到主队列时,它会立即触发“主”方法,以便我的子队列同时运行。我的印象是主要方法一次被解雇一次。即仅适用于队列顶部的操作。
也许我在这里遗漏了一些东西,但我似乎无法弄清楚如何阻止其他操作,直到第一个完成。此外,我甚至无法让我的程序进入导致NSOperation的isReady = 0的情况......总是回报是。
这里有一些代码:
注意:我已将NSOperation队列maxConcurrentOperations设置为1。
NSOperation主要方法:
-(void)main {
[subQueue download];
}
设置队列:
ChapterDownloadOperation *cdo = [[ChapterDownloadOperation alloc] init];
cdo.chapter = ch;
[chapterDownloadQueue addOperation:cdo];
[cdo release];
如果我添加多个操作,则main方法将在实例中触发,并将其添加到队列中。是否有另一个功能,我应该覆盖并使用该操作准备好摇滚。我有一种感觉,主要方法是设置操作。
任何想法都非常感激。
非常感谢。
答案 0 :(得分:2)
NSOperationQueue只要能够平衡额外的处理能力,就会触发主方法。
要一次将队列限制为一个操作,您可以尝试在排队之前在每个操作之间添加依赖关系: [B addDependency:A]; //直到A完成执行后才会调用[B main]
请注意,如果A被取消,B仍然会运行。
希望有所帮助!
答案 1 :(得分:0)