我有一个我希望以并行方式处理的事件.我的想法是将每个回调添加到ThreadPool,effectivley有每个注册由ThreadPool处理的事件的方法.
我的试用代码如下所示:
Delegate[] delegates = myEvent.GetInvocationList();
IAsyncResult[] results = new IAsyncResult[ delegates.Count<Delegate>() ];
for ( int i = 0; i < delegates.Count<Delegate>(); 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 ] );
}
Run Code Online (Sandbox Code Playgroud)
这只是为了玩,因为我很好奇如何做到这一点.我相信有更好的方法可以做到这一点.我不喜欢有一个Func创建一个持有lambda的WaitCallback.此外,与直接调用委托相比,DynamicInvoke相当慢.我怀疑这种处理事件的方式比按顺序执行要快.
我的问题是:如何以并行方式处理事件,最好是使用ThreadPool?
由于我通常使用Mono,因此.NET 4.0或任务并行库都不是一个选项.
谢谢!
编辑: - 通过Earwickers答案更正了示例. - 更新了试用代码