[英]How to execute second dispatch_async when previous first dispatch_async is finished?
[英]How a several dispatch_async to execute sequentially?
我有2种方法:
-(void)clear
{
// some code
dispatch_async( dispatch_get_global_queue(0,0),
^{
// async_block_1
});
}
-(void)download
{
// some code
dispatch_async( dispatch_get_global_queue(0,0),
^{
// async_block_2
});
}
我需要在第三种方法中调用它们:
-(void)relosd
{
[self clear];
[self download];
}
如何保证先执行async_block_1然后执行async_block_2?
显然,以下代码不能保证这一点:
-(void)reload
{
dispatch_sync( dispatch_get_global_queue(0,0),
^{
[self clear];
[self download];
});
}
可以创建GCD队列以作为串行队列运行。
只需创建自己的队列:
dispatch_queue_t queue = dispatch_queue_create("com.my.download", NULL);
您可以在声明函数的地方执行.m
部分,例如:
dispatch_queue_t getDownloadQueue() {
static dispatch_once_t onceToken;
static dispatch_queue_t ruleQueue;
dispatch_once(&onceToken, ^{
ruleQueue = dispatch_queue_create("com.my.download", NULL);
});
return ruleQueue;
}
只需将这段代码放在@implementation
之外,之后您可以执行以下操作:
-(void)clear {
// some code
dispatch_async( getDownloadQueue(), ^{
// async_block_1
});
}
-(void)download {
// some code
dispatch_async(getDownloadQueue(), ^{
// async_block_2
});
}
如果仅在类的一个实例中需要队列,然后使用属性,则此示例将创建一个队列,您可以在整个应用程序中使用该队列,并确保它们按顺序执行。
您可能会遵循rckoenes的建议,但其他选择却是。
NSOperationQueue
并设置依赖项 NSOperationQueue
并设置maxConcurrentOperationCount dispatch_barrier_async
而不是dispatch_async
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.