2012-07-08 2 views
0

Je suis nouveau dans la file d'attente d'expédition, j'essaie maintenant d'appeler les opérations d'arrière-plan dans cette file d'attente de répartition.Exécuter Désactiver le bloc de synchronisation depuis async

Ici, j'ai un doute, s'il vous plaît aidez-moi dans ce domaine. Dans l'exemple ci-dessous,

whatQueue: - Devrait-il être mainQueue, queueA ou dois-je créer une nouvelle file d'attente?

dispatch_queue_t queueA = dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_async(queueA, ^{ 
    NSMutableArray * items = listofItems; 
    for(NSString * str in items) 
    { 
     //Run a sync block to send str to server 
     dispatch_sync(***whatQueue***, ^{ 

     }); 
    } 
}); 

Merci, Phani

Répondre

0

Vous n'expliquez pas trop les raisons pour lesquelles vous voulez que le bloc interne soit exécuté de manière synchrone. Je suppose que vous voulez:

  1. pour sérialiser l'envoi des chaînes au serveur;

  2. attendez que toutes les chaînes soient envoyées avant de continuer.

Dans ce cas, vous pouvez:

  1. exécuter la tâche de réseau sur le même queueA (pas besoin d'une nouvelle expédition); Assurez-vous que votre couche réseau sous-jacente (NSURLConnection/AFNetworking/ASIHTTP/...) effectue une opération de réseau de synchronisation (sinon, la requête réseau retournera immédiatement et se terminera en arrière-plan dans son propre thread).

0

Utilisez dispatch_get_main_queue pour les expéditions imbriquées (je suppose que vous voulez une dépêche de synchronisation sur le thread principal pour les mises à jour de l'interface utilisateur, après tout). Sinon, vous travaillez déjà en arrière-plan et aucune autre expédition n'est requise.

+0

merci pour votre réponse, – user1278228

0

merci pour votre réponse,

Je ne veux pas mettre à jour juste quelque chose sur l'interface utilisateur veulent pousser des données hors ligne sur le serveur sans affecter l'interface utilisateur. La file d'attente d'expédition principale itère donc tous les enregistrements et devrait envoyer le mode de synchronisation des enregistrements en utilisant la file d'attente imbriquée et la réponse de chaque requête devrait également être gérée.

Questions connexes