开发者社区> 问答> 正文

我有一个异步的方法,如何在多次并发后得到全部结束的通知

第三方sdk有个异步上传方法 [UploadManager upload],但是只能单文件上传,要批量上传,得多次调用这个方法。现在我想得到他们全部结束的通知。

我尝试了用gcd group的方法,

dispatch_group_t group = dispatch_group_create();
for (NSData *data in array) {

 dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{
    [UploadManager upload];    
 });

}

dispatch_group_notify(group, dispatch_get_global_queue(0,0), ^{

  // 汇总结果

});
但是因为[UploadManager upload]是异步的,汇总结果总是一开始就先执行了。有什么办法解决吗?

展开
收起
a123456678 2016-07-28 12:20:28 1805 0
1 条回答
写回答
取消 提交回答
  •  dispatch_group_t serviceGroup = dispatch_group_create();
    
    // Start the first service
    dispatch_group_enter(serviceGroup);
    [self.configService startWithCompletion:^(ConfigResponse *results, NSError* error){
        // Do something with the results
        configError = error;
        dispatch_group_leave(serviceGroup);
    }];
    
    // Start the second service
    dispatch_group_enter(serviceGroup);
    [self.preferenceService startWithCompletion:^(PreferenceResponse *results, NSError* error){
        // Do something with the results
        preferenceError = error;
        dispatch_group_leave(serviceGroup);
    }];
    
    dispatch_group_notify(serviceGroup,dispatch_get_main_queue(),^{
        // Assess any errors
        NSError *overallError = nil;
        if (configError || preferenceError)
        {
            // Either make a new error or assign one of them to the overall error
            overallError = configError ?: preferenceError;
        }
        // Now call the final completion block
        completion(overallError);
    });
    2019-07-17 20:01:22
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
fibjs 模块重构从回调到协程 立即下载
fibjs 模块重构从回调到协程--陈垒 立即下载
低代码开发师(初级)实战教程 立即下载