【发布时间】:2014-04-04 02:26:47
【问题描述】:
似乎当您在背景NSURLSession 上排队太多任务(例如数百个)时,它不会很好地工作。如何将入队任务的数量保持在一个小的固定数量,比如 10?
【问题讨论】:
-
iOS11+ 测试:NSURLSession 非常适合我处理数百个任务
似乎当您在背景NSURLSession 上排队太多任务(例如数百个)时,它不会很好地工作。如何将入队任务的数量保持在一个小的固定数量,比如 10?
【问题讨论】:
在负责入队任务的类中,有一个 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
}
}
这个系统现在正在为我工作。
【讨论】: