线程等待

来源:互联网 发布:淘宝二手打印机可靠吗 编辑:程序博客网 时间:2024/06/09 17:43

dispatch_group_tgroup = 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 = [[NSURLRequestalloc]initWithURL:[NSURLURLWithString:@"https://www.baidu.com"]];
       NSURLSessionDownloadTask *task = [[NSURLSessionsharedSession]downloadTaskWithRequest:requestcompletionHandler:^(NSURL* _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
           // 请求完成,可以通知界面刷新界面等操作
           NSLog(@"第一步网络请求完成");
           
        }];
        [taskresume];
       // 以下还要进行一些其他的耗时操作
       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 = [[NSURLRequestalloc]initWithURL:[NSURLURLWithString:@"https://www.github.com"]];
       NSURLSessionDownloadTask *task = [[NSURLSessionsharedSession]downloadTaskWithRequest:requestcompletionHandler:^(NSURL* _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {
           // 请求完成,可以通知界面刷新界面等操作
           NSLog(@"第二步网络请求完成");
           dispatch_semaphore_signal(sema);
//            dispatch_semaphore_signal(sema);
        }];
        [taskresume];
       // 以下还要进行一些其他的耗时操作
       NSLog(@"耗时操作继续进行");
//        dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
    });
   dispatch_group_notify(group,dispatch_get_main_queue(), ^{
       NSLog(@"刷新界面等在主线程的操作");
    });

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