Objective c 目标C-在队列中串行执行异步操作
目前,我已经实现了一个类,它包装了一个NSOperationQueue并保存了一个指向上一个操作的指针。每次我向队列中添加另一个操作时,我都会将上一个操作作为依赖项添加,因为这些操作正在写入同一个文件(调用应该按顺序执行,我只需要从主线程中删除这些操作)。当前的实现看起来像这样Objective c 目标C-在队列中串行执行异步操作,objective-c,multithreading,asynchronous,Objective C,Multithreading,Asynchronous,目前,我已经实现了一个类,它包装了一个NSOperationQueue并保存了一个指向上一个操作的指针。每次我向队列中添加另一个操作时,我都会将上一个操作作为依赖项添加,因为这些操作正在写入同一个文件(调用应该按顺序执行,我只需要从主线程中删除这些操作)。当前的实现看起来像这样 @interface FileStoreOperationQueue : NSOperationQueue -(void)createPayloadOperation(NSString* payload); @pro
@interface FileStoreOperationQueue : NSOperationQueue
-(void)createPayloadOperation(NSString* payload);
@property(nonatomic, weak) FileStoreOperation* previousOperation;
@end
@implementation FileStoreOperationQueue
-(void)createPayloadOperation(NSString* payload){
// Create a new FileStoreOperation
// Add the 'previousOperation' as a dependency
// Add new operation to self
// previous operation = newOperation
}
@end
这让人感觉有点不舒服,有没有更自然、更干净的API方法来实现这一点?您可以将队列的并发操作数设置为1,从而有效地使队列成为串行队列。文档警告说,您不应该依赖于按顺序执行的操作,因为操作准备就绪的变化可能会改变执行顺序,但如果您的所有操作都准备好执行,您应该不会有问题 请参见“其他操作队列行为”一节 另一种选择是降低级别并使用Grand Central Dispatch的串行队列,而不是
NSOperationQueue
。这将要求您将操作转换为块,但您可以将块一次一个地按顺序执行
最后,您可以创建自己的NSOperationQueue
子类,自动使每个新操作依赖于前一个操作。这与您现在使用的解决方案相同,只是队列可以跟踪上一个操作并添加依赖项,因此它应该感觉更干净,不太“黑客化”。来自:
依赖关系是以特定方式执行操作的一种方便方法
秩序。可以使用添加和删除操作的依赖项
addDependency:和removeDependency:方法。默认情况下,一个操作
具有依赖项的对象在其所有
从属操作对象已完成执行。最后一次
从属操作完成后,操作对象将变为
准备好并能够执行
您的任务是异步的还是同步的?这非常重要,因为在第二种情况下(同步任务),有一个非常简单直接的解决方案。但是,如果任务本质上是异步的,那么解决方案就会变得更加复杂。但是,使用NSOperationQueues和NSOperations的解决方案是最复杂的。;)你让它工作了吗?我在找类似的东西。
[operation addDependency: previousOperation];