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

我想到的

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

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

天蓬老师
天蓬老师

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

全部回覆(21)
伊谢尔伦

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

迷茫

建一個block或closure。發送網路請求,在completionHandler中呼叫自身發送下一個請求。

迷茫

Android肯定RxJava. iOS RxSwift?

Ty80

dispatch_group_t group =dispatch_group_create();
dispatch_group_enter(group);
[請求1完成:^(BOOL成功,id回應){

雷雷

}];

dispatch_group_enter(group);
[請求2完成:^(BOOL成功,id回應){

雷雷

}];

dispatch_group_enter(group);
[請求3已完成:^(BOOL成功,id回應){

雷雷

}];

dispatch_group_enter(group);
[請求4已完成:^(BOOL成功,id回應){

雷雷

}];
.
.
.
.

dispatch_group_notify(group,dispatch_get_main_queue(), ^{

雷雷

});

黄舟

感覺還是使用GCD比較好,因為也可以總是在c/c++程式碼裡面

小葫芦

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

伊谢尔伦

使用GCD的group

左手右手慢动作

Android中使用RxJava可以輕鬆實現。
當然,也可以試試線程同步輔助類CountDownLatch實現,CountDownLatch的使用可以參考下面博客:
http://www.liuling123.com/2013/08/countdownlatch-demo.html

Ty80

看到大神們的答案我震驚了,面對這樣的問題我往往是手動實現的,我一般會設置一個資源變量,初始化資源為十,跑一個線程監聽資源數,然後開始並發任務,每完成一個資源減一,當資源為零時停止監聽線程,完成後續操作。

這是笨辦法。在我對某門語言不是很了解的時候我都會這樣用,畢竟大部分語言都能這樣實現。

Peter_Zhu

java本身的並發框架就支持解決你說的問題,Future

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