【问题标题】:Suspending already executing task NSOperationQueue暂停已经执行的任务 NSOperationQueue
【发布时间】:2013-03-26 10:52:53
【问题描述】:

我在暂停当前正在执行的任务时遇到问题,我尝试将 NSOperationQueue setSuspended=YES 设置为暂停,setSuspended=NO 设置为恢复进程。

根据apple docs,我不能暂停已经执行的任务。

如果您想暂时停止操作的执行,您可以使用 setSuspended: 方法暂停相应的操作队列。暂停队列不会导致已经执行的操作在其任务中间暂停。它只是防止新操作被安排执行。您可能会暂停队列以响应用户暂停任何正在进行的工作的请求,因为期望用户最终可能希望恢复该工作。

我的应用程序需要在互联网不可用的情况下暂停上传操作,并在互联网可用后最终恢复相同的操作。有什么解决方法吗?还是我只需要从零开始当前正在执行的任务?

【问题讨论】:

  • 如果您的上传目的地支持上传恢复(例如网络服务器),您可以在连接失败时保存最后上传字节的偏移量,并在连接再次可用时从该位置重新启动

标签: ios objective-c nsoperationqueue


【解决方案1】:

我认为你需要从零开始。否则会出现两个问题。如果您恢复当前的上传,您不能保证您不会错过任何数据包。同时如果连接时间过长,服务器可能会因为操作不完整而删除您之前上传的数据。

【讨论】:

    【解决方案2】:

    您是否可以恢复或暂停操作队列不是您的问题... 如果它像您想象的那样工作,当您恢复为 TCP 连接提供服务时它可能(但它没有)很可能处于错误状态,它可能已经超时,远程关闭...... 您需要了解您的服务器支持什么,并使用 REST(或类似)服务的各个部分在全新的连接上恢复停滞的上传。

    如果您还没有,打印出this 并将其贴在您的立方体的墙壁上,为您的家人制作 T 恤...也许将其添加为屏幕保护程序?

    【讨论】: