Могу ли я использовать один экземпляр делегата для запуска нескольких асинхронных запросов? - PullRequest
2 голосов
/ 15 июня 2010

Интересно, может ли кто-нибудь уточнить использование 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 в качестве параметра, я бы предположил, что первый является правильным, но я не вижу ничего в документации, чтобы указать в любом случае.

1 Ответ

3 голосов
/ 15 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...