遇到个需求,就是一个动作需要请求几个接口才能完成(都只是查询动作,但是需要根据顺序去请求),平时上网随便看看别人写的基础知识,看到一篇GCD的文章,刚好看到信号量那一部分,决定使用信号量去解决这一个问题。。。
直接贴代码:
__block dispatch_semaphore_t sem = dispatch_semaphore_create(0);
// 创建队列
dispatch_queue_t queue = dispatch_queue_create("requestBlock", NULL);
dispatch_async(queue, ^{
[self.webservice verifyPhoneSMSWithPhoneNum:self.privateAccountModel.mobilephone VerifyCode:self.privateAccountModel.authcode Complete:^(ASResponse * response) {
if (response.isOpSuccess) {
//成功之后的处理
}else{
[Toast showError:[response.error.userInfo objectForKey:NSLocalizedDescriptionKey]];
}
//信号量加1
dispatch_semaphore_signal(sem);
}];
// 只要信号量值不大于等于1,就会一直等待(-1)
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
});
dispatch_async(queue, ^{
[self.webservice getBankAccountTypeWithBankAccount:privateAccount[@"bankaccount"] Complete:^(ASResponse * response) {
if (response.isOpSuccess) {
// _debit_credit_flag = response.
[self checkCertificationWithPrivateParam:param bankCardType:[response.mapData[@"debit_credit_flag"] longValue]];
}else{
[Toast showError:[response.error.userInfo objectForKey:NSLocalizedDescriptionKey]];
}
dispatch_semaphore_signal(sem);
}];
// 只要信号量值不大于等于1,就会一直等待
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
});
//请求完之后再作统一处理
dispatch_async(queue, ^{
dispatch_async(dispatch_get_main_queue(), ^{
[Toast done];
});
});
引用:https://blog.csdn.net/li15809284891/article/details/55097366
记录一下,以后再上来看看,作为菜鸟的我,要继续努力。
网友评论