Posso usare una singola istanza di un delegato per avviare più richieste asincrone?
-
27-09-2019 - |
Domanda
chiedevo se qualcuno potesse chiarire l'uso di BeginInvoke
su un'istanza di qualche delegato quando si desidera effettuare più chiamate asincrone dal momento che la documentazione MSDN in realtà non copertura / parlare di questo a tutti.
Quello che voglio fare è qualcosa di simile al seguente:
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 domanda è: posso fare questo con un'istanza del delegato o devo un'istanza del delegato per ogni singola chiamata?
Dato che EndInvoke()
prende un IAsyncResult
come parametro Parto dal presupposto che il primo è corretto, ma non riesco a vedere nulla nella documentazione per indicare in entrambi i casi.
Soluzione
Sì, nessun problema. Otterrete una diversa IAsyncResult per ogni chiamata a BeginInvoke (). Non c'è nessuno stato associato al thread iniziato nell'oggetto delegato stesso.