在我的应用中,用户可以一次下载多个文件。这些文件大约每个2MB。
由于用户可以根据需要一次选择多个文件,因此我将library(data.table)
setDT(df1)[, rn := 1:.N]
dcast(melt(df1, id.var= "rn"), rn ~variable, value.var="value", sum)[, rn:= NULL][]
# B C U
#1: 2 2 1
#2: 4 4 2
#3: 6 6 3
#4: 8 8 4
设置为仅允许2个并发操作。
以下是我设置会话管理器的方法:
operationQueue
现在下载开始了。但是如果所有文件的下载时间超过我指定的超时时间,则所有其他NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
configuration.timeoutIntervalForRequest = 60;
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
[manager.operationQueue setMaxConcurrentOperationCount:2];
self.urlSessionManager = manager;
(以及那些甚至没有启动的人)都会失败。所以似乎超时星计数第二个我创建downloadTask而不是当他们真正开始提出请求时?
由于我有一个队列,我预计超时会在下载任务变为下载后立即开始计算?!
为了能够真正让用户一次下载所有这些文件,我需要更改什么?
答案 0 :(得分:1)
基本上,如果请求永远不会启动(因此从不请求任何数据),那么传入的数据将不会重置该计时器,这意味着任务在60秒后被取消。这种行为有点不明显,可能值得提一下。
您可以通过创建自己的URL协议来解决此问题,该协议在会话中重新发出请求,没有超时和没有连接限制(以便您的代码知道请求何时实际启动),然后自己管理超时。