在Swift中实现一个连续从可能空的队列中拉出的进程的正确方法是什么?

时间:2016-05-31 03:53:38

标签: ios swift multithreading concurrency grand-central-dispatch

我有一个模块,用资源提供和填充队列,特别是URL字符串。该模块将异步网络请求旋转,这些请求使用onSuccess回调,该回调推送到串行队列内的URL_ResourceQueue,专门用于访问该资源。

现在,我希望不断地从URL字符串队列中取出不同的进程。如果它提取了一个URL,它应该处理一个URL,然后将它的数据放入另一个队列,以供UI稍后使用。如果队列为空,它应该启动一个超时计时器,如果它关闭将终止出队并告诉UI发生了什么。

我想在这里完成的高级涂鸦:

A high level doodle of what I'm trying to acomplish here.

到目前为止,我认为我可以通过循环(伪代码)执行此操作:

while (running) {
    var url : String?

    inURLResourceGCD.sync { 
          var quit = doTimeoutStuff();

          if (quit) { running = false; return; }
          url = URLQueue.dequeue(); 
    }

    launchAsyncURLProcessing();
}

但循环似乎有各种各样的问题。它询问队列是否经常空,以至于它可以在其他任务中停止串行GCD队列。由于URL Generator仍然在运行,因此处理如此多的队列为空的请求似乎也很浪费。

处理此问题的正确方法是什么?

0 个答案:

没有答案