我想调用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
});
});
答案 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