URLSessionDownloadTask:取消写入数据

Posted

技术标签:

【中文标题】URLSessionDownloadTask:取消写入数据【英文标题】:URLSessionDownloadTask: Cancel writing data 【发布时间】:2017-04-18 23:00:55 【问题描述】:

我正在开发一个需要几分钟才能下载一个大文件并将其写入磁盘的应用程序。客户通知我,他们希望能够随时取消。我所做的是封装一个全局URLSession 来处理下载任务。在用户输入之后,我将在会话中调用invalidateAndCancel()。我发现方法

urlSession(_ session: URLSession, 
        downloadTask: URLSessionDownloadTask,    
        didWriteData bytesWritten: Int64, 
   totalBytesWritten: Int64, 
   totalBytesExpectedToWrite: Int64) 

即使在会话无效和取消后也不会停止调用。

问题

如何让这个方法停止执行?

【问题讨论】:

【参考方案1】:

Previous Thread

试试上面的链接,我认为它比我能解释得更好。还有Another Reference

【讨论】:

嗯...不。 invalidateAndCancel 方法取消给定会话中的所有任务(因此是“取消”)。根据文档,您应该在调用该方法后永远获得额外的委托调用(或者最多在几毫秒后处理多线程)。如果这不是您所看到的,那么您没有取消正确的会话,您的任务不在该会话中,或者您发现了一个非常严重的错误。

以上是关于URLSessionDownloadTask:取消写入数据的主要内容,如果未能解决你的问题,请参考以下文章

在 Core Data 中存储 URLSessionDownloadTask

从 URLSessionDownloadTask 恢复数据 始终为零

无法从 URLSessionTaskDelegate 获取数据

后台应用刷新对后台 URLSession 有影响吗?

完成后在后台下载并唤醒应用程序

如何在闭包中使用 self 来防止内存泄漏