使用多个线程时Alamorefile上传图像超时

时间:2019-10-09 03:13:29

标签: alamofire rx-swift

我正在使用moya通过使用OperationQueue来控制maxConcurrentOperationCount来上传许多图像。假设我有100张图片,每次上传5张图片。 Alamorefire超时设置为10秒。

上载一张图像非常快,令人不安地触发了超时。但是,当我使用以下方法上传100张图像时,即使使用多线程,也会触发超时。为什么? 谢谢!

queue = OperationQueue()
            queue.maxConcurrentOperationCount = 5
            var i = 0
            for image in photos {
                autoreleasepool {
                    let operation:BlockOperation = BlockOperation(block: {
                        [weak self] in
                        guard let strongSelf = self else {return}
                        print("hyl cur thread %@", Thread.current)
                        strongSelf.uploadImage(image)
                        return
                    })
                    i += 1
                    queue.addOperation(operation)
                }
            }
private func uploadImage(_ image: UIImage) {
        AladdinProvider.rx.request(.upload(access_token: UserInfo.instance.access_token!, file_name: "file_name", data: image)).asObservable().mapJSON().mapObject(type: AlbumDatas.self).subscribe(onNext: {
            [weak self] result in
            guard let strongSelf = self else {return}
            // TODO success

            }, onError: {
                 error in
                print(\(error))

        }).disposed(by: disposeBag)
    }

1 个答案:

答案 0 :(得分:0)

从根本上讲,这是在允许URLSessionTask运行之前创建和恢复它们的问题。 Alamofire加剧了这一点,后者在创建相应的URLSessionTask值后立即创建*Request。增加用于图像下载的URLRequest的超时可能会有所帮助。一个更彻底的解决方案是立即停止创建Alamofire请求,而仅在前几个请求完成后才创建它们。这样可以防止相关任务超时。