java - 发送10个网络请求,然后再接收到所有回应之后执行后续操作,如何实现?
天蓬老师
天蓬老师 2017-04-17 16:15:12
0
21
1571

我想到的

for iOS
1.用dispatch_group实现
2.用RunLoop实现   

还有没有其他的比较好的实现方式,求关于并发编程的文章.

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆(21)
刘奇

有人說了 NSOperation,我就不說了。
但我比較喜歡 GCD。這個問題可以用 barrier 來解決:

    dispatch_queue_t queue = dispatch_queue_create("JOHNSHAW", DISPATCH_QUEUE_CONCURRENT);
    
    dispatch_async(queue, ^{
        NSLog(@"task 1");
        sleep(1);
    });
    dispatch_async(queue, ^{
        NSLog(@"task 2");
        sleep(1);
    });
    
    dispatch_barrier_async(queue, ^{
        NSLog(@"after task 1 and task 2");
        sleep(1);
    });
    
    dispatch_async(queue, ^{
        NSLog(@"do someting else");
    });

其實我比較喜歡 RAC,不過 RAC 畢竟是個重型框架,用的公司不多

    RACSignal *task1 = ...;
    RACSignal *task2 = ...;
    
    [[RACSignal combineLatest:@[task1,task2]] subscribeNext:^(id x) {
        NSLog(@"after task1 and task2 ");
    }];
阿神

用RxAndroid。一.zip方法就搞定了。 。

洪涛

比較好的方式使用NSOperation 因為有addDependecy方法~

洪涛

For javascript:

  1. https://github.com/caolan/async
    處理非同步的並行與序列都很方便

  2. 用jQuery的Promise, 或其它函式庫的Promise實作 :)

Ty80

借鑒下map reduce方法,類似於歸併排序的思路

迷茫

正常使用 dispatch_group_wait 和 dispatch_group_notify 就好了。

也可以使用 dispatch_barrier_sync / dispatch_barrier_async,將收到所有回應之後的操作用作 barrier block,那麼這個 block 就會等待所有網路請求結束之後再執行。

黄舟

不知道你問的Android還是iOS, 如果是Android用CountDownLatch來控制執行緒吧

PHPzhong

java的話,用concurrent套件的future api可以實作多執行緒分別請求,然後全部回應後處理結果。

左手右手慢动作

for iOS
建立一個串列佇列處理。不影響外部並發請求。

黄舟

JS中如何實現?

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板