管理后台NSURLSession中的活动任务数

时间:2014-04-03 14:01:59

标签: objective-c nsurlsession

似乎当你在后台NSURLSession上排队太多任务(比方说数百个)时,它并没有很好地运作。如何将排队任务的数量保持在一个固定的小数字,例如10?

1 个答案:

答案 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
    }
}

这个系统现在正在为我工​​作。

相关问题