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

我最近在MSDN上阅读了这个post 。 所以我想使用lambda表达式作为一种调用EndInvoke的方式,只是为了确保一切都很好和整洁。 哪个更正确?

例1:

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

例2:

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

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

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

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

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

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