gpt4 book ai didi

ios - 如何检查调度队列是否为空?

转载 作者:可可西里 更新时间:2023-11-01 04:38:22 26 4
gpt4 key购买 nike

我的情况是,当我将 tableview 滚动到底部或顶部时,我需要重新加载、刷新作业,从服务器请求新数据,但我想检查上一个作业是否完成或不。如果最后一个请求仍然有效,我不应该发出另一个请求。

我正在使用从 dispatch_queue_create() 创建的相同后台队列来处理 httpRequest。

- (id)init {
self = [super init];
if (self) {
...
dataLoadingQueue = dispatch_queue_create(@"DataLoadingQueue", NULL);
}
return self;
}

从现在开始,我只使用一个 BOOL 值来检测作业是否正在运行。像这样:

if(!self.isLoading){

dispatch_async(dataLoadingQueue, ^{

self.isLoading = YES;
[self loadDataFromServer];

});

}

我只是想知道是否有任何方法可以将代码更改为如下所示:

if(isQueueEmpty(dataLoadingQueue)){

dispatch_async(dataLoadingQueue, ^{

[self loadDataFromServer];

});

}

因此,我可以删除无处不在且需要继续跟踪的令人讨厌的 BOOL 值。

最佳答案

为什么不改用 NSOperationQueue(检查 [operationQueue operationCount])?

如果你只想使用 GCD,dispatch_group_t 可能适合你。

@property (atomic) BOOL isQueueEmpty;
dispatch_group_t dispatchGroup = dispatch_group_create();
dispatch_group_async(dispatchGroup, dataLoadingQueue, ^{
self.isQueueEmpty = NO;
//Do something
});

dispatch_group_notify(dispatchGroup, dataLoadingQueue, ^{
NSLog(@"Work is done!");
self.isQueueEmpty = YES;
});

当任务完成时,组将为空并触发 dispatch_group_notify 中的通知 block 。

关于ios - 如何检查调度队列是否为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29113300/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com