Ios 清空调度异步队列-这段代码是如何工作的?
我正在进行一个异步请求调用,如下所示:Ios 清空调度异步队列-这段代码是如何工作的?,ios,asynchronous,grand-central-dispatch,Ios,Asynchronous,Grand Central Dispatch,我正在进行一个异步请求调用,如下所示: -(void)logout{ dispatch_async(dataQueue, ^{}); } .h文件: @interface APIManager : NSObject { dispatch_queue_t dataQueue; } .m文件: -(id)init{ dataQueue = dispatch_queue_create("com.test.dataQueue", DISPATCH_QUEUE_SERIAL);
-(void)logout{
dispatch_async(dataQueue, ^{});
}
.h文件:
@interface APIManager : NSObject {
dispatch_queue_t dataQueue;
}
.m文件:
-(id)init{
dataQueue = dispatch_queue_create("com.test.dataQueue", DISPATCH_QUEUE_SERIAL);
}
此队列的使用方式如下:
dispatch_async(dataQueue, ^(void){
//data retrieval from server + parsing
});
当用户注销时,我将清空队列,如下所示:
-(void)logout{
dispatch_async(dataQueue, ^{});
}
我这样做对吗?我不想挂起队列然后继续 您在
注销中的代码不会清空队列,它只是在队列末尾附加一个空块
大中央调度没有取消功能。您可能想看看如何使用NSOperationQueue
,它同样易于使用,并且具有取消功能。调用dispatch\u sync(dataQueue,^{})-logout
中的code>将允许您知道先前提交到队列的所有块都已完成
但是,除非在调用-logout
后(通过单独的同步),确保没有人向数据队列提交新块,否则它不能确保队列实际上是空的
确保所有相关工作已完成的常用技术是使用与队列关联的调度组,并使用dispatch\u group\u async()
将所有工作提交到队列。这允许您等待组中的所有工作通过dispatch\u group\u wait()。然而,目前还不清楚这里需要的是取消,可能实际上需要完成数据队列中的工作。。。