线程等待

dispatch_group_t group = dispatch_group_create ();
    dispatch_semaphore_t sema = dispatch_semaphore_create ( 0 );
    dispatch_group_async (group, dispatch_queue_create ( "com.dispatch.test" , DISPATCH_QUEUE_CONCURRENT ), ^{
        NSURLRequest *request = [[ NSURLRequest alloc ] initWithURL :[ NSURL URLWithString : @" https://www.baidu.com " ]];
        NSURLSessionDownloadTask *task = [[ NSURLSession sharedSession ] downloadTaskWithRequest :request completionHandler :^( NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
            // 请求完成,可以通知界面刷新界面等操作
            NSLog ( @"第一步网络请求完成" );
           
        }];
        [task resume ];
        // 以下还要进行一些其他的耗时操作
        NSLog ( @"耗时操作继续进行" );
        dispatch_semaphore_wait (sema, DISPATCH_TIME_FOREVER );
    });
    dispatch_group_t group1 = dispatch_group_create ();
    dispatch_group_async (group1, dispatch_queue_create ( "com.dispatch.test" , DISPATCH_QUEUE_CONCURRENT ), ^{
//        dispatch_semaphore_t sema = dispatch_semaphore_create(0);
        NSURLRequest *request = [[ NSURLRequest alloc ] initWithURL :[ NSURL URLWithString : @" https://www.github.com " ]];
        NSURLSessionDownloadTask *task = [[ NSURLSession sharedSession ] downloadTaskWithRequest :request completionHandler :^( NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
            // 请求完成,可以通知界面刷新界面等操作
            NSLog ( @"第二步网络请求完成" );
            dispatch_semaphore_signal (sema);
//            dispatch_semaphore_signal(sema);
        }];
        [task resume ];
        // 以下还要进行一些其他的耗时操作
        NSLog ( @"耗时操作继续进行" );
//        dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
    });
    dispatch_group_notify (group, dispatch_get_main_queue (), ^{
        NSLog ( @"刷新界面等在主线程的操作" );
    });

参考文章:http://www.jianshu.com/p/888ea823c8a5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值