????JOIN???
????CGD????dispatch_group_wait?????????????join????????????£?
1     dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT?? 0);
2     dispatch_group_t group = dispatch_group_create();
3
4     dispatch_group_async(group?? queue?? ^{
5         sleep(0.5);
6         NSLog(@"1");
7     });
8     dispatch_group_async(group?? queue?? ^{
9         sleep(1.5);
10         NSLog(@"2");
11     });
12     dispatch_group_async(group?? queue?? ^{
13         sleep(2.5);
14         NSLog(@"3");
15     });
16
17     NSLog(@"aaaaa");
18
19     dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW?? 2ull * NSEC_PER_SEC);
20     if (dispatch_group_wait(group?? time) == 0) {
21         NSLog(@"????????????");
22     }
23     else {
24         NSLog(@"?????????");
25     }
26
27     NSLog(@"bbbbb");

????????????3???????????????????????dispatch_time_t???????????????2????????????У??????????aaaaa???????????????????????dispatch_group_wait????????????????2?????????????У?????????????1??2??2?????????????????????????????????????????????bbbbb??
?????????????????????????????????5???????????2.5?????????????????????????bbbbb?????????????е?????????????????????????????????
?????????????????????????????DISPATCH_TIME_FOREVER??
???????????
??????????C#??PLINQ??OC????????????????У???GCD?????????dispatch_apply??????
????1     dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT?? 0);
????2     dispatch_apply(20?? queue?? ^(size_t i) {
????3         NSLog(@"%lu"?? i);
????4     });
??????δ?????i?????????20?Σ????????????????????飬???????????????????????????????dispatch_sync?????????????????????????????????У??????????????
???????????
???????dispatch_suspend(queue)????????????????????У????dispatch_result(queue)?????????б????????С?