События C #: как обрабатывать событие параллельно
У меня есть событие, которое я хотел бы обработать параллельно. Моя идея состоит в том, чтобы сделать каждый обратный вызов добавленным в ThreadPool, effectivley должен иметь каждый метод, который зарегистрировал событие, обработанное ThreadPool.
Мой пробный код выглядит примерно так:
Delegate[] delegates = myEvent.GetInvocationList();
IAsyncResult[] results = new IAsyncResult[ delegates.Count() ];
for ( int i = 0; i < delegates.Count(); i++ )
{
IAsyncResult result = ( ( TestDelegate )delegates[ i ] ).BeginInvoke( "BeginInvoke/EndInvoke", null, null );
results[ i ] = result;
}
for ( int i = 0; i < delegates.Length; i++ )
{
( ( TestDelegate )delegates[ i ] ).EndInvoke( results[ i ] );
}
Это просто для игры, потому что мне интересно, как это сделать. Я уверен, что есть лучший способ сделать это.Я неМне нравится иметь Func, который создает WaitCallback, который содержит лямбду. Кроме того, DynamicInvoke довольно медленный по сравнению с прямым вызовом делегата. Я сомневаюсь, что этот способ обработки события быстрее, чем просто сделать это последовательно.
У меня такой вопрос: как я могу обработать событие параллельно, желательно с помощью ThreadPool?
Так как я обычно работаю с Mono, .NET 4.0 или Task Parallel Library не подходят.
Спасибо!
РЕДАКТИРОВАТЬ: - Исправленный пример благодаря ответу Earwickers. - Обновлен пробный код