结束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));