Ios 我如何知道我在中央调度中心的所有任务都已完成?
我需要将多个任务发送到Grand Central Dispatch才能运行。有些任务将首先完成,而有些任务将最后完成 我如何知道我在中央调度中心的所有任务都已完成Ios 我如何知道我在中央调度中心的所有任务都已完成?,ios,Ios,我需要将多个任务发送到Grand Central Dispatch才能运行。有些任务将首先完成,而有些任务将最后完成 我如何知道我在中央调度中心的所有任务都已完成 我应该使用计数器记录完成的任务数吗?任何更智能的方法?您可以使用调度组在所有任务完成时收到通知。这是我们的一个例子 如果希望控制一个任务在最后执行,可以使用调度组,如果希望一个任务不仅在某些任务之后执行,而且在某些任务之前执行,可以使用调度同步: dispatch_queue_t queue = dispatch_queue_crea
我应该使用计数器记录完成的任务数吗?任何更智能的方法?您可以使用调度组在所有任务完成时收到通知。这是我们的一个例子
如果希望控制一个任务在最后执行,可以使用调度组,如果希望一个任务不仅在某些任务之后执行,而且在某些任务之前执行,可以使用调度同步:
dispatch_queue_t queue = dispatch_queue_create("com.example.gcd", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue, ^{ printf("1");});
dispatch_async(queue, ^{ printf("2");});
dispatch_barrier_sync(queue, ^{ printf("3");});
dispatch_async(queue, ^{ printf("4");});
dispatch_async(queue, ^{ printf("5");});
它可以打印
12345 or 21354 or ... but 3 always after 1 and 2, and 3 always before 4 and 5
如果要精确控制顺序,可以使用dispatch\u sync或串行调度队列或NSOperationQueue。如果使用NSOperationQueue,请使用“addDependency”方法控制任务的顺序:
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"op 1");
}];
NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"op 2");
}];
NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"op 3");
}];
//op3 is executed last after op2,op2 after op1
[op2 addDependency:op1];
[op3 addDependency:op2];
[queue addOperation:op1];
[queue addOperation:op2];
[[NSOperationQueue mainQueue] addOperation:op3];
它将始终打印:
op1 op2 op3
您可以使用GCD在swift 3中使用DispatchGroup实现这一点。当所有任务完成时,您会收到通知
let group = DispatchGroup()
group.enter()
run(after: 6) {
print(" 6 seconds")
group.leave()
}
group.enter()
run(after: 4) {
print(" 4 seconds")
group.leave()
}
group.enter()
run(after: 2) {
print(" 2 seconds")
group.leave()
}
group.enter()
run(after: 1) {
print(" 1 second")
group.leave()
}
group.notify(queue: DispatchQueue.global(qos: .background)) {
print("All async calls completed")
}
谢谢iOS是否支持此功能?开发指南sais“在iOS 4.0及更高版本中提供。”()
let group = DispatchGroup()
group.enter()
run(after: 6) {
print(" 6 seconds")
group.leave()
}
group.enter()
run(after: 4) {
print(" 4 seconds")
group.leave()
}
group.enter()
run(after: 2) {
print(" 2 seconds")
group.leave()
}
group.enter()
run(after: 1) {
print(" 1 second")
group.leave()
}
group.notify(queue: DispatchQueue.global(qos: .background)) {
print("All async calls completed")
}