我有一个模块,用资源提供和填充队列,特别是URL字符串。该模块将异步网络请求旋转,这些请求使用onSuccess回调,该回调推送到串行队列内的URL_ResourceQueue,专门用于访问该资源。
现在,我希望不断地从URL字符串队列中取出不同的进程。如果它提取了一个URL,它应该处理一个URL,然后将它的数据放入另一个队列,以供UI稍后使用。如果队列为空,它应该启动一个超时计时器,如果它关闭将终止出队并告诉UI发生了什么。
我想在这里完成的高级涂鸦:
到目前为止,我认为我可以通过循环(伪代码)执行此操作:
while (running) {
var url : String?
inURLResourceGCD.sync {
var quit = doTimeoutStuff();
if (quit) { running = false; return; }
url = URLQueue.dequeue();
}
launchAsyncURLProcessing();
}
但循环似乎有各种各样的问题。它询问队列是否经常空,以至于它可以在其他任务中停止串行GCD队列。由于URL Generator仍然在运行,因此处理如此多的队列为空的请求似乎也很浪费。
处理此问题的正确方法是什么?