当用于同时下载多个会话时,URLSessionDownloadTask调用并不总是有效

时间:2019-01-25 11:11:23

标签: ios swift

我使用此代码同时下载多个资产,但是 代码偶尔会失败。

我为此呼叫添加了重试功能,但这并不是一个好的解决方案。 知道为什么对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()
  }
}

0 个答案:

没有答案