iOS中的多个异步调用

iOS中的多个异步调用,ios,grand-central-dispatch,nsoperationqueue,nsthread,dispatch-async,Ios,Grand Central Dispatch,Nsoperationqueue,Nsthread,Dispatch Async,我想调用web服务将一些图像数据上载到服务器。我必须将数据发送5次到服务器。这段代码写在一个函数中,该函数在持续10秒后由计时器调用。现在的问题是Web服务的响应可能会延迟,对Web服务的第二次调用可能会启动。我想让他们排队,这样当一个完成时,另一个就会被叫来。我想我走的路不对。我只想维护一个队列,在这个队列中我可以多次调用web服务并对服务器进行不同的异步调用。基本上,我可以调用多个异步任务 任何帮助都将不胜感激 dispatch_queue_t myQueue; myQueue = disp

我想调用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

                                });
                            });

一个简单的方法是保留一个计数器并递归。看起来您的
上传到服务器
是一个阻塞调用

- (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];

添加了一个示例项目。也许还有其他方法,但您可以在示例过程中简单地使用TaskQueue.m类。如果愿意,您可以修改它

你能解释一下“我只想维护一个队列,在这个队列中我可以多次调用web服务并对服务器进行不同的异步调用”吗。我知道,您希望在异步线程(队列)中调用同步调用。您的方法应该做到这一点(我不确定,但您可以将async更改为sync)。“基本上我可以调用多个异步任务。”这意味着你如何创建更多队列?是的,你可以这么说。。我将解释整个情况。。我每隔10秒收集一些gps数据(跟踪数据),然后每次收集后我必须将数据发送到服务器(必须在50秒内发送5次数据)。我的UI也不应该阻塞。这就是为什么要使用异步。我只是想问一下我做的是否正确。你能给我一些工作的例子吗,在iOS中有2-3个aynch调用击中了一些web服务。如果没有任何函数来处理你的情况,比如在异步线程上发送同步队列。但您可以使用自己的队列(真实队列,而不是线程队列)来处理此问题。您可以为此创建一个具有基于FIFO的数组的类,然后创建一个异步进程来检查该FIFO数组中是否还有剩余任务。我可以预先给你一个样品,但我附近没有我的mac电脑。我可以在6-7小时后发送。非常感谢。如果可能的话,请在你有空的时候发送样品。。。非常感谢。@kocakmstf您能寄给我任何样品吗?同样的原则也适用。完成后,无论达到何种程度(我认为AFNetworking允许您提供一个完成块),以递减的重复次数重复。