美文网首页
多个网络请求之后再进行其他操作

多个网络请求之后再进行其他操作

作者: 冰点雨 | 来源:发表于2020-08-17 10:04 被阅读0次

1.dispatch_group_t

 dispatch_group_t group = dispatch_group_create();
    dispatch_queue_t searialQueue = dispatch_queue_create("com.hmc.www", DISPATCH_QUEUE_SERIAL);
    
    dispatch_group_enter(group);
    dispatch_async(searialQueue, ^{
        //// 网络请求一
        [NSThread sleepForTimeInterval:1];
        NSLog(@"网络请求一");
        dispatch_group_leave(group);
    });
    
    dispatch_group_enter(group);
    dispatch_async(searialQueue, ^{
        // 网络请求二
        [NSThread sleepForTimeInterval:1];
        NSLog(@"网络请求二");
        dispatch_group_leave(group);
    });
    
    
    dispatch_group_enter(group);
    dispatch_async(searialQueue, ^{
        // 网络请求三
        [NSThread sleepForTimeInterval:1];
        NSLog(@"网络请求三");
        dispatch_group_leave(group);
    });
    
    
      //三个网络请求结束后(三个网络请求有先后顺序),会进入这个方法,在这个方法中进行洁面的刷行
       dispatch_group_notify(group, searialQueue, ^{
           dispatch_async(dispatch_get_global_queue(0, 0), ^{
               dispatch_async(dispatch_get_main_queue(), ^{
                   // 刷新UI
                   NSLog(@"刷新UI");
               });
           });
     
       });

执行结果:

2020-08-03 14:07:13.972148+0800 GCDDemo[4731:159552] 网络请求一
2020-08-03 14:07:14.977551+0800 GCDDemo[4731:159552] 网络请求二
2020-08-03 14:07:15.983003+0800 GCDDemo[4731:159552] 网络请求三
2020-08-03 14:07:15.983349+0800 GCDDemo[4731:159501] 刷新UI

2.dispatch_semaphore_t

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    
    dispatch_semaphore_t sem = dispatch_semaphore_create(0);
    
    dispatch_async(queue, ^{
           //// 网络请求一
        [NSThread sleepForTimeInterval:1];
           NSLog(@"网络请求一");
           dispatch_semaphore_signal(sem);
       });
    
    
  
    dispatch_async(queue, ^{
        // 网络请求二
        [NSThread sleepForTimeInterval:1];
        NSLog(@"网络请求二");
        dispatch_semaphore_signal(sem);
    });
    
    
    dispatch_async(queue, ^{
        // 网络请求三
        [NSThread sleepForTimeInterval:1];
        NSLog(@"网络请求三");
        dispatch_semaphore_signal(sem);
    });
    
      dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
      dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
    
    //三个网络请求结束后(三个网络请求没有先后顺序),会进入这个方法,在这个方法中进行洁面的刷行
    dispatch_async(dispatch_get_main_queue(), ^{
         // 刷新UI
        NSLog(@"刷新UI");
    });

执行结果:

2020-08-03 14:08:41.418035+0800 GCDDemo[4731:161332] 网络请求二
2020-08-03 14:08:41.418033+0800 GCDDemo[4731:161333] 网络请求三
2020-08-03 14:08:41.418033+0800 GCDDemo[4731:160835] 网络请求一
2020-08-03 14:08:41.418937+0800 GCDDemo[4731:159501] 刷新UI

有问题请指正

相关文章

网友评论

      本文标题:多个网络请求之后再进行其他操作

      本文链接:https://www.haomeiwen.com/subject/vegvrktx.html