小编gal*_*tor的帖子

C#事件:如何以并行方式处理事件

我有一个我希望以并行方式处理的事件.我的想法是将每个回调添加到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答案更正了示例. - 更新了试用代码

c# parallel-processing performance delegates event-handling

4
推荐指数
1
解决办法
3165
查看次数