A B C D 4个并发下载任务,怎样在第一时间知道任务全部完成?

dispatch_group 可以帮我们实现这样的控制。

上代码,看说明.

  1. dispatch_group_t group = dispatch_group_create();
  2. // 某个任务放进 group
  3. dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
  4. // 任务代码1
  5. });
  6. dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
  7. // 任务代码2
  8. });
  9. dispatch_group_notify(group, dispatch_get_main_queue(), ^{
  10. // 任务全部完成处理
  11. NSLog(@"isover");
  12. });

创建一个任务组,然后将异步操作放进组里面,在最后用notify 告知所有任务完成,并做相应处理,一般来说都是在主线程里面刷新UI来提示用户了。你如果不依赖UI放进子线程里面也是没有问题的。当然group同步的方式还有其他

  1. dispatch_async(dispatch_get_global_queue(0, 0), ^{
  2. for (int i = 0; i < 3; i ++)
  3. {
  4. dispatch_group_enter(group);
  5. // 任务代码i 假定任务 是异步执行block回调
  6. // block 回调执行
  7. dispatch_group_leave(group);
  8. // block 回调执行
  9. }
  10. });
  11. dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
  12. dispatch_async(dispatch_get_main_queue(), ^{
  13. // 主线程处理
  14. });

首先我们异步执行,因为dispatch_group_wait函数是阻塞的,for里面安排了三个任务,这三个任务都是加载,在任务开始前 调用 enter,任务完成时调用leave,wait函数一直阻塞,直到它发现group里面的任务全部leave,它才放弃阻塞(任务全部完成),然后我们在主线程更新UI告知用户.

最新文章

  1. C# 7.0 新功能代码范例
  2. hdu 1032
  3. easyui form 方式提交数据
  4. error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 E:\OCX
  5. copy
  6. Codeforces 525E Anya and Cubes
  7. select2简单例子
  8. maven的webapp产品热销部署eclipse,biz和其他子项目jar一揽子的解决方案无法找到!
  9. [Shell]随机数
  10. Linux笔记(五) - 用户管理命令
  11. sql 语句写的行列转换
  12. Membership ——入门基础
  13. selenium——键盘操作
  14. 用keytool制作证书并在tomcat配置https服务(二 )
  15. MVC中权限的知识点及具体实现代码
  16. Linux关机命令和重启命令
  17. 4-java 格式化输出
  18. ubuntu16.04 中文输入法
  19. oracle 日期时间函数
  20. 20155333 2016-2017-2 《Java程序设计》第十周学习总结

热门文章

  1. Spring Boot 3 Hibernate
  2. MVC 应用程序级别捕捉异常
  3. MySQLdb模块 类操作方法
  4. C#实现根据IP 查找真实地址
  5. 关于 0xCCCCCCCC
  6. iOS - (调用系统本机打电话功能)
  7. iTOP-4412 开发板镜像的烧写
  8. Codeforce Round #219 Div2
  9. 【Origin】工仕途中
  10. JetBrains公司介绍(Java、Python、PHP、Ruby、前端和代码测试与重构的IDE)