2010-06-15 3 views
2

Просто задалось вопросом, может ли кто-нибудь разъяснить использование BeginInvoke экземпляра некоторого делегата, если вы хотите сделать несколько асинхронных вызовов, поскольку документация MSDN на самом деле не затрагивает/не упоминает об этом вообще.Могу ли я использовать один экземпляр делегата для запуска нескольких асинхронных запросов?

То, что я хочу сделать что-то вроде следующего:

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 

Вопрос я могу сделать это с одним экземпляром делегата или мне нужен экземпляр делегата для каждого вызова?

Учитывая, что EndInvoke() принимает параметр IAsyncResult в качестве параметра, я бы предположил, что первое верно, но я не вижу ничего в документации, указывающей в любом случае.

ответ

3

Да, без проблем. Вы получите другой IAsyncResult для каждого вызова BeginInvoke(). Не существует состояния, связанного с начальным потоком в самом делететете.

 Смежные вопросы

  • Нет связанных вопросов^_^