In meinem Fall, wenn eine App startet, möchte ich 3 Web-APIs mit NSURLSessionDataTask
aufrufen. Ich habe 3 verschiedene Methoden für jede API und in jeder Methode gibt es eine NSURLSessionDataTask
.Wie mehrere NSURLSessionDataTask seriell ausgeführt werden?
Ich möchte meinen Code so gestalten, dass diese drei Methoden seriell auszuführen. Da Methode B von der Antwort von Methode A abhängig ist, hängt Methode C von der Antwort von Methode B ab. Jede Methode führt nach der API-Antwort auch eine Datenbankoperation aus. Also, ich brauche eine serielle Ausführung von methodA
, methodB
und methodC
.
Ich weiß, dass dies eine logische Sache ist, aber ich will dispatch_semaphore_t
oder dispatch_group_wait
verwenden, aber ich habe absolut keine Ahnung, wie ich das in einer Verbindung mit NSURLSessionDataTask
verwenden kann.
Ich habe mit dieser versucht:
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
[self syncA:^(BOOL success) {
NSLog(@"syncA — Completed");
dispatch_semaphore_signal(semaphore);
}];
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
[self syncB:^(BOOL success) {
NSLog(@"syncB — Completed");
dispatch_semaphore_signal(semaphore);
}];
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
[self syncC:^(BOOL success) {
NSLog(@"syncC — Completed");
dispatch_semaphore_signal(semaphore);
}];
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
NSLog(@"************* END OF SYNC *************");
Der obige Code am 1. Methode .. steckt Bitte mir helfen .. Vielen Dank im Voraus !!!
Verwenden Sie NSOperationQueue für alle seriellen Operationen. –
Konzeptionell ist 'NSURLSession' eine Operationswarteschlange !!! – NSPratik
Blick in diese Frage http://stackoverflow.com/questions/21198404/nsurlsession-with-nsblockoperation-and-queues –