异步请求/响应:我什么时候做的?

时间:2012-08-09 03:10:36

标签: ios cocoa-touch cocoa cocoa-design-patterns

这是一个设计模式问题。

想象一个编程任务,其中一个正在开发一个客户端,它将异步地(通过流)与服务器交互。让我们说挑战是执行不确定数量的任务,每个任务可能产生不确定数量的子任务(即 - 爬树)。每个任务向服务器发出一个异步请求,并提供两个块(一个用于处理预期的返回条件,一个用于处理错误条件)以处理响应处理。

在这样的场景中,我很容易看到如何对出站请求进行排队,但清空该队列并不意味着整体任务已完成,因为后续响应处理可能会排队更多的出站请求。在完成整体任务的过程中,出站请求队列可以多次达到零。

在iOS下,您可以建议使用哪种选项(设计模式和有用的类)来确定整体任务何时真正完成?

另一个问题是,在错误情况下(对于任何子任务),我希望取消整体任务(以及所有子任务)。

提前致谢!

2 个答案:

答案 0 :(得分:1)

对出站请求进行排队与服务器和客户端之间的通信有关,这与完成无关。

每当您需要执行任务时,您都会发送任务请求并将其添加到当前待处理的任务集合中。

当您收到答案时,您将对其进行处理,最终生成新任务,然后从待处理任务集合中删除答案所涉及的任务。

当没有待处理任务时,您就完成了。

中止错误需要服务器的明确支持。您需要能够发送对待处理任务的中止请求,并且服务器必须能够中止该任务并向您确认此事实(或者如果在服务器上已完成任务,则忽略中止请求,并且服务器已经为您发送了该任务的答案。)

处理错误响应时,您将执行待处理任务集合,为每个任务发送一个中止请求,并将其标记为已取消(但将它们保留在待处理任务集合中)。

当您收到标记为已取消的任务的答案时,无论是成功答案,错误答案还是中止确认,您都会忽略它(并从集合中删除该任务)。

答案 1 :(得分:0)

对不起,可能是我不正确理解你,试试ASIHTTPRequest,http://allseeing-i.com/ASIHTTPRequest/,可能对你有帮助。

相关问题