从异步运行Dispatch sync block

时间:2012-07-08 06:14:18

标签: iphone ios multithreading queue dispatch

我是Dispatch队列的新手,现在正尝试通过此调度队列调用后台操作。

我怀疑,请帮助我。在下面的例子中,

whatQueue: - 它应该是mainQueue,queueA还是我应该创建一个新的队列?

dispatch_queue_t queueA = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

dispatch_async(queueA, ^{
     NSMutableArray * items = listofItems;
    for(NSString * str in items)
    {
         //Run a sync block to send str to server
        dispatch_sync(***whatQueue***, ^{

        });
    }
});

谢谢, Phani

3 个答案:

答案 0 :(得分:0)

使用dispatch_get_main_queue进行嵌套调度(我假设您希望主线程上的同步调度用于UI更新,毕竟)。否则,您已经在后台运行,无需进一步调度。

答案 1 :(得分:0)

您没有解释为什么希望以同步方式执行内部块的原因。我想你想要:

  1. 序列化将字符串发送到服务器;

  2. 等待所有字符串发送后再继续。

  3. 在这种情况下,你可以:

    1. 在同一队列A上执行网络任务(无需新的调度);

    2. 确保您的基础网络层(NSURLConnection / AFNetworking / ASIHTTP / ...)正在执行同步网络操作(否则,网络请求将立即返回并在后台以其自己的线程完成)。 / p>

答案 2 :(得分:0)

感谢您的回复,

我不想更新UI上的任何内容,只是想在不影响用户界面的情况下将脱机数据推送到服务器。

因此主调度队列会迭代所有记录,并应使用嵌套队列发送记录同步模式,并且还应处理每个请求的响应。