我需要对http服务器异步运行查询并处理响应。查询真的是一个相当大的方法调用链,回调。这增加了复杂性,因为在调用链中有很多返回路径。如何可靠地管理后台请求?
直到当前的请求完全完成,才能启动新的请求。
这里的大致轮廓:
- 一些线程调用
[Foo poll]
。 poll
方法启动一些在后台运行的HTTP请求。在这种情况下,ASIHTTPRequest。- 这些请求最终会调用
[Foo onRequestComplete]
来解析响应。在错误[Foo onRequestError
]被调用。这是第二个返回路径。 - 然后通过回调和更多返回路径对服务器进行更多调用。
- 最终将一些东西保存到磁盘。
- 的调查是完全
这里是收集:在这些步骤中,调用poll
应该被忽略(返回)或阻塞,直到调查完成。
在另一轮询正在运行时,如何确保poll
功能块或无操作?
一个非常幼稚的做法是增加一个'Server.isBusy'属性,但不是线程安全的,非常杂乱维护,考虑错误处理路径等。关于GCD,块或同步? – 2011-03-25 20:36:40
锁定或GCD - http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/ThreadSafety/ThreadSafety.html#//apple_ref/doc/uid/10000057i-CH8-SW1 – Joe 2011-03-25 20:46:35