我想到的
for iOS
1.用dispatch_group实现
2.用RunLoop实现
还有没有其他的比较好的实现方式,求关于并发编程的文章.
怪我咯2017-04-17 16:17:12
有人說了 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 ");
}];
PHP中文网2017-04-17 16:17:12
For javascript:
https://github.com/caolan/async
處理非同步的並行與序列都很方便
用jQuery的Promise, 或其它函式庫的Promise實作 :)
迷茫2017-04-17 16:17:12
正常使用 dispatch_group_wait 和 dispatch_group_notify 就好了。
也可以使用 dispatch_barrier_sync / dispatch_barrier_async,將收到所有回應之後的操作用作 barrier block,那麼這個 block 就會等待所有網路請求結束之後再執行。