此代码在工作时按FIFO顺序执行两个任务:
-(void) update {
@autoreleasepool {
dispatch_queue_t queue = dispatch_queue_create("us.yellosoft", 0);
// inpternal address
dispatch_async(queue,^(){
// TODO: implement NSProgressIndicator logic
[internalIpMenuItem setTitle: @"Updating..."];
// get IP address from [[NSHost currentHost] addresses]...
NSString *localIP = [self getLocalIP];
// change UI
[internalIpMenuItem setTitle: localIP];
});
// external address
dispatch_async(queue, ^(){
// TODO: implement NSProgressIndicator logic
[externalIpMenuItem setTitle: @"Updating..."];
// get IP address from external JSON service...
NSString *externalIP = [AddressService getIPaddress];
// change UI
[externalIpMenuItem setTitle: localIP];
});
}
}
我想同时运行两个任务。这可能吗?
答案 0 :(得分:1)
来自docs:
在iOS 5及更高版本中,您可以自己创建并发调度队列 通过将DISPATCH_QUEUE_CONCURRENT指定为队列类型。在 此外,还有四个预定义的全局并发队列 申请使用。有关如何获得全球化的更多信息 并发队列,请参阅“Getting the Global Concurrent Dispatch Queues。”
答案 1 :(得分:1)
你“可以”,但如果你使用UIKit方法,你需要调度到主线程。
为了并行化工作,您应该使用全局并发队列。使用您自己的并发调度队列,只有在您想要同步对共享资源的访问时才有意义 - 在这种情况下,您需要使用dispatch_barrier_async
和dispatch_barrier_sync
。