我正在尝试从 S3 存储桶中并行下载多个图像,我想知道所有图像是否都已完成。我能够使用我用以下签名编写的函数来执行对象的下载:
func downloadImage(key: String) -> AWSTask
返回的 AWSTask 是来自 AWSS3TransferUtility 实例的这个:
downloadDataFromBucket:key:expression:completionHander:
我想在所有下载完成后运行一些代码,所以我试过这段代码:
for image in imageList {
downloadTaskList.append(downloadImage(image))
}
AWSTask(forCompletionOfAllTasks:downloadTaskList).continueWithBlock {
(task: AWSTask!) -> AnyObject! in
print("All images downloaded")
return nil
}
在此代码中,imageList 是一个字符串列表,downloadTaskList 是一个列表,其中附加了所有 AWSTasks。
问题是它在下载图像之前立即打印“所有已下载的图像”。我认为这是因为从 downloadDataFromBucket 返回的 AWSTask 在下载开始时被认为是完整的,而不是在下载完成时。我可以将什么 AWSTask 添加到列表中以使其正常工作?我尝试添加 downloadDataFromBucket 的完成处理程序,但它不是 AWSTask。
最佳答案
我设法使用 AWSTaskCompletionSource 完成了自己的任务。我只是在我的函数顶部创建一个新的任务完成源:
let taskCompletionSource = AWSTaskCompletionSource()
我在函数末尾返回相应的任务:
return taskCompletionSource.task
最后,我在完成处理程序中将任务设置为已完成:
taskCompletionSource.setResult("Download Completed")
如果出现错误,完成处理程序还会在 taskCompletionSource 上调用 setError。
关于ios - 从 iOS (Swift) 上的 AWS S3 存储桶并行下载对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38057067/