dispatch_group多個并發(fā)的請求總結(jié)果的管理

需求:公司當(dāng)前的項目有一個頁面是需要兩個請求并發(fā),且都成功后才算整個界面的數(shù)據(jù)請求成功

思路:首先想到的就是用dispatch_group,可寫好后dispatch_notify并未等請求的block都執(zhí)行完后才走,后就定義了個bool屬性,采用kvo的方式實(shí)現(xiàn)了,事后還是感覺不是很好,就又找了些資料,經(jīng)實(shí)踐dispatch_group的enter group和leave group可實(shí)現(xiàn)需求

關(guān)鍵代碼如下

dispatch_group_t group = dispatch_group_create();

dispatch_queue_t queue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

dispatch_group_enter(group);

dispatch_group_async(group, queue, ^{

//request

? ? ? ?[self requestPropertiesWithParams:skuParams success:^() {

? ? ? ? ? ? dispatch_group_leave(group);

? ? ? ?} failed:^(NSString *errMsg) {

? ? ? ? ? self.isFailed = YES;

? ? ? ? ?dispatch_group_leave(group);

? ? ?}];

});

dispatch_group_enter(group);

dispatch_group_async(group, queue, ^{

? ? ? ? [self requetGoodsPropertiesDetailWithParams:skugoodsParams ? ? ? ? ? ? ? ? ? ? ? ? success:^() {

? ? ? ? ? ? ? dispatch_group_leave(group);

? ? ? ?} failed:^(NSString *errMsg) {

? ? ? ? ? ? self.isFailed = YES;

? ? ? ? ? ? ?dispatch_group_leave(group);

? ? ? }];

});

dispatch_group_notify(group, dispatch_get_main_queue(), ^{

? ? ? ? ? if (self.isFailed == YES) {

? ? ? ? ? ? ? ? ? if (self.requestFailedBlock) {

? ? ? ? ? ? ? ? ? ? ?self.requestFailedBlock(@"請求失敗");

? ? ? ? ? ? ? ? }

? ? ? ? ? ?}else{

? ? ? ? ? ? ? ? ? [self filterData];

? ? ? ? ? ? ? ? ?HLGoodsDetailModel *model =? [self ? ? ? ? ?getNewModel:self.goodsDetailModel];

? ? ? ? ? ? ? ?[self.itemsDict setObject:model forKey:fileName];

? ? ? ? ? ? ? ?if (self.requestSuccessBlock) {

? ? ? ? ? ? ? ? ? ? self.requestSuccessBlock(model);

? ? ? ? ? ? ? ?}

? ? ? ?}

});

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容