2016-12-05 5 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

"다른 깔끔한 일을 종속성은 작업 대기열에 의해 제한되지 않는다는 것을 의미합니다. 이제는 무엇을 의미합니까? 응용 프로그램에 두 개의 작업 대기열이있는 경우 첫 번째 대기열의 작업은 두 번째 대기열의 작업에 종속 될 수 있습니다. "

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]; 

출력을 : : 여기

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

당신이 시도 할 수 있습니다 예입니다

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 

당신이 [a2 addDependency:b2] 라인을 볼 수있는 작업의 하위 큐가 내 완료 할 수 있습니다 메인 큐.