2009-01-12 76 views
12

我最近在read this thread on MSDN。所以我想使用lambda表達式作爲調用EndInvoke的一種方式,以確保一切都很好和整齊。哪一個更準確?結束BeginInvoke的正確方法是什麼?

例子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); 

回答

11

你的第二個例子是稍微更有效,因爲「法」委託實例沒有被捕獲在關閉。我懷疑你永遠不會注意到。

6

你可能想閱讀Haacked的博客this線程。 還沒有機會測試它,但要點是在最後行之一:

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

其實我已經讀過那篇文章,這似乎有點多餘使用QueueUserWorkItem(如果您可以將調用中的lambda傳遞給BeginInvoke)。 – 2009-01-12 15:44:18

12

我不知道這是否是回一月'09可能的方式,但肯定現在你可以這樣寫:

method.BeginInvoke(5, method.EndInvoke, null); 
相關問題