美文网首页
多个网络请求的并发

多个网络请求的并发

作者: Cyan_Queen | 来源:发表于2018-02-26 12:12 被阅读0次

第一种GCD 方式:

// 创建信号量

    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);

    // 创建全局并行

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    dispatch_group_t group = dispatch_group_create();

    dispatch_group_async(group, queue, ^{

        // 请求一

        [self loadFriendList:^(id result) {

            dispatch_semaphore_signal(semaphore);

        }];

    });

    dispatch_group_async(group, queue, ^{

        // 请求二

        [self loadPhotoList:^(id result) {

            dispatch_semaphore_signal(semaphore);

        }];

    });

    dispatch_group_notify(group, queue, ^{

        // 二个请求对应二次信号等待

        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

        //在这里 进行请求后的方法,回到主线程

        dispatch_async(dispatch_get_main_queue(), ^{

            //更新UI操作

            [self setConfiguration];

        });

    });

第二种 通过请求数量计数

typedefvoid(^Complete)();

@property(copy, nonatomic) Complete complete;

NSInteger requestCount = 0;

    //第一个网络请求    [CommodityViewModel getPriceTransformForIntegral:nil onSuccess:^(id data) {

        NSLog(@"duihuan11");

        requestCount++;

        if (self.complete) {

            self.complete();

        }

    } onFailure:^(NSError *error) {

    }];

    //第二个网络请求    [CommodityViewModel getPriceTransformForIntegral:nil onSuccess:^(id data) {

        NSLog(@"duihuan22");

        requestCount++;

        if (self.complete) {

            self.complete();

        }

    } onFailure:^(NSError *error) {

    }];

    //第三个网络请求    [CommodityViewModel getPriceTransformForIntegral:nil onSuccess:^(id data) {

        NSLog(@"duihuan33");

        requestCount++;

        if (self.complete) {

            self.complete();

        }

    } onFailure:^(NSError *error) {

    }];

    self.complete = ^{

            //请求网络的数量等于3表示三个网络请求已完成            if (requestCount == 3) {

                //在这里 进行请求后的方法,回到主线程                dispatch_async(dispatch_get_main_queue(), ^{

                    //更新UI操作                });

            }

        };

相关文章

网友评论

      本文标题:多个网络请求的并发

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