dispatch_group_t
group =
dispatch_group_create
();
dispatch_semaphore_t
sema =
dispatch_semaphore_create
(
0
);
dispatch_group_async
(group,
dispatch_queue_create
(
"com.dispatch.test"
,
DISPATCH_QUEUE_CONCURRENT
), ^{
NSURLRequest
*request = [[
NSURLRequest
alloc
]
initWithURL
:[
NSURL
URLWithString
:
@"
https://www.baidu.com
"
]];
NSURLSessionDownloadTask
*task = [[
NSURLSession
sharedSession
]
downloadTaskWithRequest
:request
completionHandler
:^(
NSURL
*
_Nullable
location,
NSURLResponse
*
_Nullable
response,
NSError
*
_Nullable
error) {
// 请求完成,可以通知界面刷新界面等操作
NSLog
(
@"第一步网络请求完成"
);
}];
[task
resume
];
// 以下还要进行一些其他的耗时操作
NSLog
(
@"耗时操作继续进行"
);
dispatch_semaphore_wait
(sema,
DISPATCH_TIME_FOREVER
);
});
dispatch_group_t
group1 =
dispatch_group_create
();
dispatch_group_async
(group1,
dispatch_queue_create
(
"com.dispatch.test"
,
DISPATCH_QUEUE_CONCURRENT
), ^{
// dispatch_semaphore_t sema = dispatch_semaphore_create(0);
NSURLRequest
*request = [[
NSURLRequest
alloc
]
initWithURL
:[
NSURL
URLWithString
:
@"
https://www.github.com
"
]];
NSURLSessionDownloadTask
*task = [[
NSURLSession
sharedSession
]
downloadTaskWithRequest
:request
completionHandler
:^(
NSURL
*
_Nullable
location,
NSURLResponse
*
_Nullable
response,
NSError
*
_Nullable
error) {
// 请求完成,可以通知界面刷新界面等操作
NSLog
(
@"第二步网络请求完成"
);
dispatch_semaphore_signal
(sema);
// dispatch_semaphore_signal(sema);
}];
[task
resume
];
// 以下还要进行一些其他的耗时操作
NSLog
(
@"耗时操作继续进行"
);
// dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
});
dispatch_group_notify
(group,
dispatch_get_main_queue
(), ^{
NSLog
(
@"刷新界面等在主线程的操作"
);
});
参考文章:http://www.jianshu.com/p/888ea823c8a5