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

发布于 2022-09-01 07:20:15 字数 487 浏览 10 评论 0

第三方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]是异步的,汇总结果总是一开始就先执行了。有什么办法解决吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

苦笑流年记忆 2022-09-08 07:20:15

这个真算是月经问题了。我直接放一段代码你就懂了。

 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);
});
氛圍 2022-09-08 07:20:15

设个计数器,再弄个通知也能实现,没有dispatch_group那么顺手。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文