iOS中的多个异步调用

时间:2015-02-26 09:23:16

标签: ios grand-central-dispatch nsoperationqueue nsthread dispatch-async

我想调用Web服务将一些图像数据上传到服务器。我必须将数据发送5次到服务器。这段代码写在一个函数中,该函数在计时器持续10秒后调用。现在的问题是Web服务的响应可能会延迟,并且可能会启动对Web服务的第二次调用。我希望将它们保留在队列中,以便在完成其他操作时调用它们。我想我不是正确的。我只想维护一个队列,在其中我可以多次调用Web服务并对服务器进行不同的异步调用。基本上我可以调用多个异步任务。

任何帮助将不胜感激。

dispatch_queue_t myQueue;
myQueue = dispatch_queue_create("My Queue",NULL);
 dispatch_async(myQueue, ^{
                               [self uploadDataToServer];
                                dispatch_async(dispatch_get_main_queue(), ^{
                                    // Update the UI

                                });
                            });

2 个答案:

答案 0 :(得分:0)

一种简单的方法是保持计数器并递归。您的uploadToServer似乎是一个阻止呼叫,例如。

- (void)uploadDataToServerAndRepeat:(NSUInteger)repeatCount {
    if(repeatCount)
        dispatch_async(
            dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_NORMAL, 0),
            ^{
                [self uploadDataToServer];
                [self uploadDataToServerAndRepeat:repeatCount - 1];

                // dispatch async to main queue for UI update, too
            });
}

// ... and, to start things off ...
[self uploadDataToServerAndRepeat:5];

答案 1 :(得分:0)

添加了一个示例项目。也许还有其他方法,但您可以在示例流程中使用 TaskQueue.m 类。如果您愿意,可以修改它。 https://github.com/kocakmstf/AsyncTaskQueue