似乎当你在后台NSURLSession
上排队太多任务(比方说数百个)时,它并没有很好地运作。如何将排队任务的数量保持在一个固定的小数字,例如10?
答案 0 :(得分:4)
在负责排队任务的班级中,有一个用于跟踪活动任务的ivar,例如
// In MySessionWrapper.m
@interface MySessionWrapper () {
NSMutableSet *activeTaskIds;
}
@end
将任务排入队列时,会将其ID添加到该组:
[activeTaskIds addObject:@([task taskIdentifier])]
当您获得didComplete
回调时,您会删除该ID,如果活动任务的数量低于您的
目标,您添加更多任务:
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
{
// other stuff
[activeTaskIds removeObject:@([task taskIdentifier])]
if ([activeTaskIds count] < NUMBER) {
// add more tasks
}
}
这个系统现在正在为我工作。