结束BeginInvoke的正确方法是什么?

Mik*_*e_G 13 c# lambda

我最近在MSDN上阅读了这个帖子.所以我在考虑使用lambda表达式作为调用EndInvoke的方式,以确保一切都很好和整洁.哪个更正确?

例1:

Action<int> method = DoSomething;

method.BeginInvoke(5, (a)=>{method.EndInvoke(a);}, null);
Run Code Online (Sandbox Code Playgroud)

例2:

Action<int> method = DoSomething;

method.BeginInvoke(5, (a)=>
                                  {
                                      Action<int> m = a.AsyncState as Action<int>;
                                      m.EndInvoke(a);
                                  }, method);
Run Code Online (Sandbox Code Playgroud)

Mar*_*tos 13

我不知道这是否可能在09年1月回归,但现在你可以写下这个:

method.BeginInvoke(5, method.EndInvoke, null);
Run Code Online (Sandbox Code Playgroud)


Han*_*ant 12

您的第二个示例稍微更高效,因为不必在闭包中捕获"方法"委托实例.我怀疑你有没有注意到.


Bor*_*ens 6

您可能想在Haacked的博客上阅读主题.没有机会测试它,但要点是最后一行:

ThreadPool.QueueUserWorkItem(callback => im.Send(to, from, subject, body));
Run Code Online (Sandbox Code Playgroud)