如何在大型中央调度操作中运行异步操作?

时间:2011-06-07 05:57:40

标签: iphone objective-c multithreading ios grand-central-dispatch

我有一个需要处理的作业队列,队列定期被计时器踢,但也会在新作业添加到队列时调用线程。

当队列被踢时我想在另一个线程上启动队列处理,因为我不想阻止调用线程(在很多情况下会是UI线程)。

为此,我在高优先级并发队列上运行一个大型中央调度操作,这将创建一个我的http类的实例并通过它提交作业(作业本质上是一个http请求)。

http类在内部使用NSURLConnection执行请求异步。

我的问题是GCD操作完成(因为它已经提交了所有异步http请求),所以我猜它运行的线程要么被清理并重新使用,要么退出。这正在消除我正在执行这些异步Web请求的http类。

我的问题是,如何让我的http类挂起并完成处理请求而不让GCD操作等待它们?

干杯

1 个答案:

答案 0 :(得分:0)

asynch http的主要目的不是阻塞主线程,因为你通过操作队列使用后台线程我会说它已经被处理了。因此,如果定义的处理结束,您可以将数据恢复到什么状态。

我会说同步http会更清晰,更容易支持。您可以使用具有同步方法的NSURLConnection:

[NSURLConnection sendSynchronousRequest:returningResponse:error:]

我还发现了一个提供同步操作模式的库,并承诺使cocoa(包括cocoa touch)网络编程变得更加容易:ASIHttpRequest