- (void)demo1 {
//創建組
dispatch_group_t group = dispatch_group_create();
//創建隊列
dispatch_queue_t queue = dispatch_queue_create("hm", DISPATCH_QUEUE_CONCURRENT);
//任務1
dispatch_group_enter(group);
dispatch_async(queue, ^{
NSLog(@"任務1");
dispatch_group_leave(group);
});
//任務2
dispatch_group_enter(group);
dispatch_async(queue, ^{
NSLog(@"任務2");
dispatch_group_leave(group);
});
//任務3
dispatch_group_enter(group);
dispatch_async(queue, ^{
[NSThread sleepForTimeInterval:2.0];
NSLog(@"任務3");
dispatch_group_leave(group);
});
//等待組中的任務都執行完畢,才會執行
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
NSLog(@"over");
});
//等待組中的任務都執行完畢,才會繼續執行后續的代碼
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
NSLog(@"hello ");
}
結果 :
2016-09-13 13:50:23.992 12-調度組[2598:1484594] 任務2
2016-09-13 13:50:23.992 12-調度組[2598:1484584] 任務1
2016-09-13 13:50:25.993 12-調度組[2598:1484590] 任務3
2016-09-13 13:50:25.993 12-調度組[2598:1484334] hello
2016-09-13 13:50:25.999 12-調度組[2598:1484334] over
- (void)demo2 {
//創建組
dispatch_group_t group = dispatch_group_create();
//隊列
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
dispatch_group_async(group, queue, ^{
NSLog(@"正在下載第一個歌曲");
});
dispatch_group_async(group, queue, ^{
NSLog(@"正在下載第二個歌曲");
[NSThread sleepForTimeInterval:2.0];
});
dispatch_group_async(group, queue, ^{
NSLog(@"正在下載第三個歌曲");
});
//當三個異步任務都執行完成,才執行
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
NSLog(@"over %@",[NSThread currentThread]);
});
}
2016-09-13 13:56:18.718 12-調度組[2625:1529382] 正在下載第一個歌曲
2016-09-13 13:56:18.718 12-調度組[2625:1529377] 正在下載第二個歌曲
2016-09-13 13:56:18.718 12-調度組[2625:1529384] 正在下載第三個歌曲
2016-09-13 13:56:20.724 12-調度組[2625:1529302] over <NSThread: 0x7f9d63e03f30>{number = 1, name = main}