2013-01-23 4 views
2

Disons que j'appelleQue fait réellement CloudQueue.EndAddMessage (IAsyncResult)?

AsyncCallback callback = new AsyncCallback(QueueMessageAdded); 
queue.BeginAddMessage(new CloudQueueMessage(message), callback, null); 

QueueMessageAdded est

private static void QueueMessageAdded(IAsyncResult result) 
{ 
    queue.EndAddMessage(result); 
} 

Qu'est-ce que EndAddMessage faire?

Y compris en attente pour tous les callbacks avoir été appelé, il est aussi lent que d'appeler la version synchrone comme ceci:

Parallel.ForEach(messages, message => queue.AddMessage(message)); 

Répondre

1

Première approche fait la demande de façon asynchrone et donc votre fil ne doit pas bloquer en attendant pour une réponse. D'autre part, la seconde approche utilisera N threads, chacun d'eux bloquera jusqu'à ce qu'une réponse soit reçue à sa requête respective.

Veuillez vous référer au Asynchronous Programming Model (APM) pour plus d'informations. Toutes les méthodes End * complètent l'opération asynchrone, ce qui signifie qu'elle se bloque jusqu'à la fin de l'opération, renvoie le résultat de l'opération le cas échéant et procède au nettoyage.

+0

La seconde approche (Parallèle) ne créera pas de threads; il va simplement les acquérir à partir du pool de threads. – Henrik

+0

Merci pour la correction. –

0

La première approche vous permet d'utiliser concurrentes demandes! Un seul thread peut, avec la première approche, envoyer des centaines de messages simultanés, même si la latence d'une seule requête POST pour obtenir sa réponse est élevée. Si vous regardez production code targeting ASB vous pouvez voir quelques modèles dans la façon dont APM/Async est utilisé.

+0

Merci, ce n'était pas ma question principale si - désolé si ce n'était pas clair. Je me demande toujours ce que fait la fonction EndAddMessage et si/pourquoi il est nécessaire de l'appeler. –

Questions connexes