我使用此代码同时下载多个资产,但是 代码偶尔会失败。
我为此呼叫添加了重试功能,但这并不是一个好的解决方案。 知道为什么对downloadTask的调用失败了吗?
是否存在某种限制,例如并发任务数? 还是应该使用特定的队列?
@objc class Downloader : NSObject {
@objc var fileUrl:URL
@objc var destinationUrl:URL
@objc var dispachGroup:DispatchGroup?
@objc var optionalAsset:Bool
@objc var retryCalled:Int
var downloadTask:URLSessionDownloadTask? = nil
@objc init(dispachGroup:DispatchGroup,fileURL: URL , destinationFileUrl: URL, optionalAsset:Bool) {
self.dispachGroup = dispachGroup
self.fileUrl = fileURL
self.destinationUrl = destinationFileUrl
self.optionalAsset = optionalAsset
self.retryCalled = 0
}
@objc func stop() {
downloadTask?.cancel()
}
@objc func preformDownload(delegate:URLSessionDownloadDelegate, delay:TimeInterval, timeout:TimeInterval) {
let sessionConfig = URLSessionConfiguration.default
let operationQueue = OperationQueue()
let urlSession = URLSession(configuration: sessionConfig, delegate: delegate, delegateQueue: operationQueue)
var request = URLRequest(url: self.fileUrl)
request.timeoutInterval = timeout
self.downloadTask?.cancel()
self.downloadTask = urlSession.downloadTask(with: request)
self.downloadTask?.resume()
}
}