1

这是一个设计模式问题。

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

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

在 iOS 下,您会建议什么样的选项(设计模式和有用的类)来确定整体任务何时真正完成?

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

提前致谢!

4

2 回答 2

1

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

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

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

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

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

处理错误响应时,您遍历待处理任务的集合,为每个任务发送一个中止请求到服务器并将它们标记为已取消(但将它们留在待处理任务集合中)。

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

于 2012-08-09T10:10:00.983 回答
0

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

于 2012-08-09T06:15:25.493 回答