2009-01-12 18 views
12

Son zamanlarda read this thread on MSDN. Bu yüzden, her şeyin güzel ve düzenli olduğundan emin olmanın bir yolu olarak EndInvoke'u çağırmanın bir yolu olarak bir lambda ifadesi kullanmayı düşünüyordum. Hangisi daha doğru olur?BeginInvoke'u sonlandırmak için uygun yol?

örnek 1:

Action<int> method = DoSomething; 

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

Örnek 2:

Action<int> method = DoSomething; 

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

cevap

11

"yöntemi" temsilci örneği yakalanabilir zorunda değildir çünkü 2 örnek biraz daha verimlidir kapanışta. Fark edeceğini hiç sanmıyorum.

6

Sen Haacked blogunda this iplik okumak isteyebilirsiniz. bunu test etmek için bir şans içmedim, ama özü son satırlarından birinde geçerli:

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

method.BeginInvoke(5, method.EndInvoke, null); 
BeginInvoke çağrısında bir lambda geçebilirseniz QueueUserWorkItem. –

+0

QueueUserWorkItem, EndInvoke'u çağırmanın yanı sıra, diğer gelişmiş iş parçacığı havuzu yönetimi özelliklerini de sağlayabilir. Bunu kullanmak tercih edilir. – configurator

+1

Ne için kullandığınıza bağlı. ThreadPool kullanarak IIS ortamında istek işleme için kullanılabilir aynı konuları kullanacaktır. http://stackoverflow.com/questions/1453283/threadpool-in-iis-context –

12

bu geri Jan '09 mümkün bir yol olup olmadığını bilmiyorum, ama kesinlikle şimdi sadece yazabilirsiniz bu:

ben gerçekten o makaleyi okudum ve bu tür gereksiz kullanımı gibi görünüyor
İlgili konular