2010-06-15 11 views
2

Je me demandais si quelqu'un pourrait clarifier l'utilisation de BeginInvoke sur une instance de certains délégués lorsque vous souhaitez effectuer plusieurs appels asynchrones, car la documentation MSDN ne couvre pas vraiment/mention du tout.Puis-je utiliser une seule instance d'un délégué pour démarrer plusieurs demandes asynchrones?

Ce que je veux faire quelque chose comme ce qui suit:

MyDelegate d = new MyDelegate(this.TargetMethod); 
List<IAsyncResult> results = new List<IAsyncResult>(); 

//Start multiple asynchronous calls 
for (int i = 0; i < 4; i++) 
{ 
    results.Add(d.BeginInvoke(someParams, null, null)); 
} 

//Wait for all my calls to finish 
WaitHandle.WaitAll(results.Select(r => r.AsyncWaitHandle).ToArray()); 

//Process the Results 

La question est ce que je peux faire cela avec une instance du délégué ou ai-je besoin d'une instance du délégué pour chaque appel? Comme EndInvoke() prend un IAsyncResult comme paramètre je suppose que le premier est correct mais je ne peux rien voir dans la documentation pour indiquer l'une ou l'autre manière.

Répondre

3

Oui, pas de problème. Vous obtiendrez un IAsyncResult différent pour chaque appel à BeginInvoke(). Aucun état n'est associé au thread démarré dans l'objet délégué lui-même.