发送10个网络请求,然后再接收到所有回应之后执行后续操作,如何实现?

我想到的

for iOS

1.用dispatch_group实现

2.用RunLoop实现

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

回答:

有人说了 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实现 :)

回答:

借鉴下map reduce方法,类似于归并排序的思路

回答:

正常使用 dispatch_group_wait 和 dispatch_group_notify 就好了。

还可以使用 dispatch_barrier_sync / dispatch_barrier_async,将收到所有响应之后的操作用作 barrier block,那么这个 block 就会等待所有网络请求结束之后再执行。

回答:

不知道你问的Android还是iOS, 如果是Android用CountDownLatch来控制线程吧

回答:

java的话,用concurrent包的future api可以实现多线程分别请求,然后全部响应后处理结果。

回答:

for iOS
创建一个串行队列处理。不影响外部并发请求。

回答:

JS中如何实现呢?

回答:

那網絡請求都是異步的,同樣的處理方法嗎?

回答:

建一个block或closure。发送一个网络请求,在completionHandler中调用自身发送下一个请求。

回答:

Android肯定RxJava. iOS RxSwift?

回答:

dispatch_group_t group = dispatch_group_create();
dispatch_group_enter(group);
[request1 completed:^(BOOL sucess, id response){

dispatch_grpup_leave(group);

}];

dispatch_group_enter(group);
[request2 completed:^(BOOL sucess, id response){

dispatch_grpup_leave(group);

}];

dispatch_group_enter(group);
[request3 completed:^(BOOL sucess, id response){

dispatch_grpup_leave(group);

}];

dispatch_group_enter(group);
[request4 completed:^(BOOL sucess, id response){

dispatch_grpup_leave(group);

}];
.
.
.
.

dispatch_group_notify(group, dispatch_get_main_queue(), ^{

[do something];

});

回答:

感觉还是使用GCD更好,因为也可以总在c/c++代码里面

回答:

AFNetworking的可以用AFURLConnectionOperation batchOfRequestOperations: progressBlock:completionBlock:

回答:

使用GCD的group

回答:

Android中使用RxJava可以轻松实现。
当然,也可以试用线程同步辅助类CountDownLatch实现,CountDownLatch的使用可以参考下面博客:
http://www.liuling123.com/2013/08/countdownlatch-demo.html

回答:

看到大神们的答案我震惊了,面对这样的问题我往往是手动实现的,我一般会设置一个资源变量,初始化资源为十,跑一个线程监听资源数,然后开始并发任务,每完成一个资源减一,当资源为零时停止监听线程,完成后续操作。

这是笨办法。在我对某门语言不是很了解的时候我都会这样用,毕竟大部分语言都能这样实现。

回答:

java本身的并发框架就支持解决你说的问题,Future

回答:

到底问的那端?

以上是 发送10个网络请求,然后再接收到所有回应之后执行后续操作,如何实现? 的全部内容, 来源链接: utcz.com/p/181845.html

回到顶部