iOS 使用dispatch_group_enter使多次网络请求依次执行

1,140 阅读1分钟

iOS 使用dispatch_group_enter使多次网络请求依次执行

1.用到的几个方法

  • 通知 group,下个任务要放入 group 中执行

    dispatch_group_enter
    
  • 通知 group,任务成功完成,要移除,与 enter成对出现

    dispatch_group_leave:
    
  • 在任务组完成时调用,或者任务组超时是调用(完成指的是enter和leave次数一样多)

    dispatch_group_wait
    
  • 只要任务全部完成了,就会在最后调用

    dispatch_group_notify
    

    2.开启子线程的线程组

    线程1

    dispatch_group_t groupE = dispatch_group_create();
    //模拟网络请求1
    dispatch_group_enter(groupE);
    NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
    //普通的afn 请求        
    [HttpHelperClient postReqeustWithURL:@"www.baidu.com"params:dicsuccessBlock:^(NSDictionary*returnDataDic) {
                    NSLog(@"接口11请求完成");
            dispatch_group_leave(groupE);
     }failureBlock:^(NSError*error) {
     }showHUD:NO getOrPost:2];
    

    线程2

    //模拟网络请求2
    dispatch_group_enter(groupE);
    NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
    [HttpHelperClientpostReqeustWithURL:@"www.baidu.com"params:dicsuccessBlock:^(NSDictionary*returnDataDic) {
                NSLog(@"接口12请求完成");
                dispatch_group_leave(groupE);
     }failureBlock:^(NSError*error) {
     }showHUD:NO getOrPost:2];
    

    线程3

     //模拟网络请求3
    
    dispatch_group_enter(groupE);
    NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
    [HttpHelperClientpostReqeustWithURL:@"www.baidu.com"params:dicsuccessBlock:^(NSDictionary*returnDataDic) {
                NSLog(@"接口13请求完成");
                dispatch_group_leave(groupE);
     }failureBlock:^(NSError*error) {
     }showHUD:NO getOrPost:2];
    
    

    End:所有请求都成功以后刷新页面

        //所有请求都成功以后刷新页面
        dispatch_group_notify(groupE, dispatch_get_main_queue(), ^{
            NSLog(@"接口全部请求完成");//刷新页面
        });