我最近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);
答案 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));