我想到的
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 就会等待所有网络请求结束之后再执行。