取消未完成的异步通话?

时间:2015-07-21 14:51:31

标签: ios asynchronous

这与Parse相关,但可能与任何对基于云的数据的调用相关。使用回调块触发异步调用,并通过链路调节器以100%数据包丢失进行测试会带来挑战。我有一个管理它的模板,取消进程,如果它决定返回则停止运行内部块代码,

但..

持续滚动的实际调用,在这种情况下,Parse' s(例如)SaveInBackgroundWithBlock ......似乎只是继续尝试和尝试,即使应用程序正在滚动到其他事情上。

我没有找到任何能够触及和杀死这些电话的能力,并且想在这里询问如何做的建议。

2 个答案:

答案 0 :(得分:3)

这通常是一个棘手的问题。

首先,没有办法停止任何后台任务(好吧,没有我曾经敢在我的iOS代码中使用过)。你只能礼貌地要求后台任务停止,例如通过拨打"取消"方法。

因此,如果编写一个在后台运行且应该可以取消的任务,那么它需要一个"取消"方法,你的代码需要不时检查它是否被取消,并且在这种情况下停止工作并告诉别人取消(NSOperationQueue对此有一些支持,这就是IMO与GCD相比的唯一优势)。

如果您已经启动了无法取消的异步操作,那么您就会陷入困境。抱歉。异步操作需要自行检查,如果没有内置功能,则无法从外部停止。因此,如果无法取消,唯一可以做的就是确保无论该操作做什么,如果成功,结果都不能再使用了,如果失败,它不应该显示错误用户。

答案 1 :(得分:0)

您需要一些描述符或对您开始的任务的引用。如果Parse没有为您提供任何这些,您可能无法取消该任务。