Plusieurs requêtes ASIHTTP

J'ai réalisé que ces deux URL ne renvoient pas de données en même time. Je voudrais savoir comment je pourrais faire en sorte que les urls reviennent en même time. Comment pourrais-je changer ce code en GCD? Est-ce recommandé? J'ai créé une queue de répartition dans le code mais elle ne trace rien, ne fonctionne pas. sans GCD cela fonctionne mais il ne revient pas en même time. Toute aide serait appréciée!

-(void)httpRequest{ _weak ASIHTTPRequest *request1 = [ASIHTTPRequest requestWithURL:url1]; [request1 setCompletionBlock:^{ NSSsortingng *responseSsortingng1 = [request1 responseSsortingng]; //dispatch_async(backgroundProcess1,^(void){ [self plotOverlay1:responseSsortingng1]; //}); }]; [request1 setFailedBlock:^{ NSError *error=[request1 error]; NSLog(@"Error: %@", error.localizedDescription); }]; [request1 startAsynchronous]; _weak ASIHTTPRequest *request2 = [ASIHTTPRequest requestWithURL:url2]; [request2 setCompletionBlock:^{ NSSsortingng *responseSsortingng2 = [request2 responseSsortingng]; //dispatch_async(backgroundProcess2,^(void){ [self plotOverlay2:responseSsortingng2]; //}); }]; [request2 setFailedBlock:^{ NSError *error=[request2 error]; NSLog(@"Error: %@", error.localizedDescription); }]; [request2 startAsynchronous]; } 

Il n'y a aucun moyen de garantir que deux requests asynchronouss indépendantes seront renvoyées en même time.

Une solution consisterait à stringr les requêtes – en d'autres termes, lancer la deuxième requête dans le bloc d'achèvement de la première requête – puis à traiter les deux requêtes dans le bloc d'achèvement de la deuxième requête.

Une autre façon de permettre aux deux requests de s'exécuter en parallèle serait de créer des propriétés sur votre class pour contenir les réponses des requests. Dans les gestionnaires de complétion de requête, vous devez définir la propriété appropriée sur la valeur de la string de réponse, puis appeler une nouvelle méthode. Cette méthode vérifie si les propriétés responseSsortingng des deux requêtes ont une valeur et, dans l'affirmative, effectue le traitement et, dans le cas contraire, ne fait rien. De cette façon, rien ne se passera à chaque fois que la requête se termine (et peu importe laquelle finit en premier) mais votre traitement sera effectué (pour les deux requêtes) une fois que l'autre requête sera terminée.

 -(void)httpRequest { _weak ASIHTTPRequest *request1 = [ASIHTTPRequest requestWithURL:url1]; [request1 setCompletionBlock:^{ self.responseSsortingng1 = [request1 responseSsortingng]; [self checkIfBothRequestsComplete]; }]; [request1 startAsynchronous]; _weak ASIHTTPRequest *request2 = [ASIHTTPRequest requestWithURL:url2]; [request2 setCompletionBlock:^{ self.responseSsortingng2 = [request2 responseSsortingng]; [self checkIfBothRequestsComplete]; }]; [request2 startAsynchronous]; } - (void)checkIfBothRequestsComplete { if (self.responseSsortingng1 && self.responseSsortingng2) { [self plotOverlay1:self.responseSsortingng1]; [self plotOverlay2:self.responseSsortingng2]; } }