2016-12-05 10 views
1

クロスキューの依存関係操作は可能ですか?NSOperationオブジェクトにクロスキュー依存関係を使用できますか?

次のことを考えてみましょう...

let operationA = NSBlockOperation(block: someBlock) 
let operationB = NSBlockOperation(block: someOtherBlock) 

let operationC = NSBlockOperation(block: finalBlock) 
operationC.addDependency(operationA) 
operationC.addDependency(operationB) 

OperationQueue().addOperation(operationC) 
OperationQueue().addOperation(operationA) 
OperationQueue().addOperation(operationB) 

私はこれが制限された使用方法ですが、私もそのようなことは、サポート/可能であるのかはわからないと言うことのどこかのドキュメントで表示されません。 (注意:これは良い習慣であるかどうか私もちょうど思考のための食品としては可能ですか見て言語を「突く」にしようとは言わないよ)

答えて

0

はい

について「他のきちんとしたものアプリケーションに2つの操作キューがある場合、最初のキューの操作は2番目のキューの操作に依存する可能性があります。ここで

https://developer.apple.com/videos/play/wwdc2015/226/

あなたが試すことができます例です:あなたは[a2 addDependency:b2]ラインは、操作のサブキューが内に完了することができます見ることができるように

2017-01-08 00:27:03.019497 OpTest[26141:36238589] a1 
2017-01-08 00:27:03.019621 OpTest[26141:36238621] b1 
2017-01-08 00:27:03.019721 OpTest[26141:36238589] b2 
2017-01-08 00:27:03.019773 OpTest[26141:36238621] a2 

NSOperationQueue *queue1 = [[NSOperationQueue alloc] init]; 

NSBlockOperation *a1 = [[NSBlockOperation alloc] init]; 

NSBlockOperation *a2 = [[NSBlockOperation alloc] init]; 

[a1 addExecutionBlock:^{ 
    NSLog(@"a1"); 

    NSOperationQueue *queue2 = [[NSOperationQueue alloc] init]; 

    NSBlockOperation *b1 = [[NSBlockOperation alloc] init]; 

    NSBlockOperation *b2 = [[NSBlockOperation alloc] init]; 

    [b1 addExecutionBlock:^{ 
     NSLog(@"b1"); 
    }]; 

    [b2 addExecutionBlock:^{ 
     NSLog(@"b2"); 
    }]; 

    [a2 addDependency:b2]; // makes this inner queue finish first 

    [b2 addDependency:b1]; 

    [queue2 addOperations:@[b1, b2] waitUntilFinished:NO]; 

}]; 

[a2 addExecutionBlock:^{ 
    NSLog(@"a2"); 
}]; 

[a2 addDependency:a1]; 

[queue1 addOperations:@[a1, a2] waitUntilFinished:NO]; 

出力メインキュー。

関連する問題