业务说明:
A,B,C,D,E,F五个任务,ABC为三个耗时任务并发执行,D任务等待AB任务均完成后执行,E任务等待BC任务均完成后执行,F任务等待DE任务均完成后执行
GCD
#import "dispatch.h"
@implementation dispatch
-(void)done{
dispatch_group_t groupD = dispatch_group_create();
dispatch_group_t groupE = dispatch_group_create();
dispatch_group_t groupF = dispatch_group_create();
dispatch_group_enter(groupD);
dispatch_async(dispatch_get_global_queue(0, 0), ^{
sleep(3);
//A to do
dispatch_group_leave(groupD);
});
dispatch_group_enter(groupD);
dispatch_group_enter(groupE);
dispatch_async(dispatch_get_global_queue(0, 0), ^{
sleep(3);
//B to do
dispatch_group_leave(groupD);
dispatch_group_leave(groupE);
});
dispatch_group_enter(groupE);
dispatch_async(dispatch_get_global_queue(0, 0), ^{
sleep(3);
//C to do
dispatch_group_leave(groupE);
});
dispatch_group_enter(groupF);
dispatch_group_notify(groupD, dispatch_get_global_queue(0, 0), ^{
sleep(3);
//D to do
dispatch_group_leave(groupF);
});
dispatch_group_enter(groupF);
dispatch_group_notify(groupE, dispatch_get_global_queue(0, 0), ^{
sleep(3);
//E to do
dispatch_group_leave(groupF);
});
dispatch_group_notify(groupF, dispatch_get_global_queue(0, 0), ^{
sleep(3);
//F to do
});
};
@end
NSOperation
#import "Operation.h"
@implementation Operation
-(void)done{
NSBlockOperation *operationA = [NSBlockOperation blockOperationWithBlock:^{
sleep(3);
//A to do
}];
NSBlockOperation *operationB = [NSBlockOperation blockOperationWithBlock:^{
sleep(3);
//B to do
}];
NSBlockOperation *operationC = [NSBlockOperation blockOperationWithBlock:^{
sleep(3);
//C to do
}];
NSBlockOperation *operationD = [NSBlockOperation blockOperationWithBlock:^{
sleep(3);
//D to do
}];
NSBlockOperation *operationE = [NSBlockOperation blockOperationWithBlock:^{
sleep(3);
//E to do
}];
NSBlockOperation *operationF = [NSBlockOperation blockOperationWithBlock:^{
sleep(3);
//F to do
}];
[operationD addDependency:operationA];
[operationD addDependency:operationB];
[operationE addDependency:operationB];
[operationE addDependency:operationC];
[operationF addDependency:operationD];
[operationF addDependency:operationE];
NSOperationQueue *operationQueue = [[NSOperationQueue alloc]init];
[operationQueue addOperation:operationA];
[operationQueue addOperation:operationB];
[operationQueue addOperation:operationC];
[operationQueue addOperation:operationD];
[operationQueue addOperation:operationE];
[operationQueue addOperation:operationF];
};
@end