首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWSS3TransferUtility:如何在应用重启后重试失败的上传任务

AWSS3TransferUtility:如何在应用重启后重试失败的上传任务
EN

Stack Overflow用户
提问于 2020-10-08 12:45:22
回答 1查看 237关注 0票数 0

我想在应用重启后重试之前失败的S3上传任务。在app init上,我调用

代码语言:javascript
复制
    // register a transfer utility object asynchronously
    AWSS3TransferUtility.register(
        with: configuration!,
        transferUtilityConfiguration: tuConf,
        forKey: "..." // redacted
    ) { (error) in
         if let error = error {
             // handle registration error.
            Logging.logError("Error in registration: \(error)")
         } else {
            Logging.logDebug("AWS S3 TransferUtility registration success, now check for pending tasks")
            DispatchQueue.global().asyncAfter(deadline: .now() + 2.0) {
                finishPendingTasks()
            }
        }
    }

下面是完成未决任务的函数

代码语言:javascript
复制
  static func finishPendingTasks() {
    let transferUtility = AWSS3TransferUtility.default()
    let uploadTasks = transferUtility.getUploadTasks().result

    Logging.logDebug("Finish pending AWS upload tasks")
    var progressBlock: AWSS3TransferUtilityProgressBlock?
    progressBlock = {(task, progress) in
        DispatchQueue.main.async(execute: {
            // Do something e.g. Update a progress bar.
            Logging.logDebug("upload in process \(progress)")
        })
    }

    var completionHandler: AWSS3TransferUtilityUploadCompletionHandlerBlock?
    completionHandler = { (task, error) -> Void in
        DispatchQueue.main.async(execute: {
            // Do something e.g. Alert a user for transfer completion.
            // On failed uploads, `error` contains the error object.
            Logging.logDebug("upload completed1 \(task.bucket)")
            Logging.logDebug("upload completed2 \(String(describing: task.response))")
            Logging.logDebug("upload completed3 \(task.key)")
            Logging.logDebug("upload error \(String(describing: error))")
        })
    }

    let taskCount = uploadTasks?.count ?? 0
    Logging.logDebug("Number of upload tasks: \(taskCount)")
    for task in uploadTasks! {
        if let awsTask = task as? AWSS3TransferUtilityUploadTask {
            Logging.logDebug("Resuming uploading task key \(awsTask.key), transfer ID: \(awsTask.transferID), status: \(awsTask.status.rawValue)")
            awsTask.setCompletionHandler(completionHandler!)
            awsTask.setProgressBlock(progressBlock!)
            awsTask.resume() // <------- HAS NO EFFECT!
        }
    }
}

状态rawValue为0

不确定resume()是否是触发重试的原因。有记录在案的程序吗?

看不到完成处理程序/进度块在起作用。

在查看this时,似乎亚马逊网络服务并没有真正跟踪与任务相关的数据,看起来必须手动维护和上传数据。

你知道怎么处理重试吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-20 12:23:50

默认情况下,重试限制似乎为0。可以通过设置来更改

代码语言:javascript
复制
AWSS3TransferUtilityConfiguration().retryLimit = ...

resume()在这种情况下不适用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64255940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档