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

时间:2009-01-12 15:34:03

标签: c# lambda

我最近read this thread on MSDN。所以我在考虑使用lambda表达式作为调用EndInvoke的方式,以确保一切都很好和整洁。哪个更正确?

示例1:

Action<int> method = DoSomething;

method.BeginInvoke(5, (a)=>{method.EndInvoke(a);}, null);

示例2:

Action<int> method = DoSomething;

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

3 个答案:

答案 0 :(得分:12)

您的第二个示例稍微高效一点,因为不必在闭包中捕获“method”委托实例。我怀疑你有没有注意到。

答案 1 :(得分:12)

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

method.BeginInvoke(5, method.EndInvoke, null);

答案 2 :(得分:6)

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

ThreadPool.QueueUserWorkItem(callback => im.Send(to, from, subject, body));