2016-08-23 42 views
1

基本上,如果我做的每一次這樣的事情...Func <T>始終是同一個對象?

class Bla 
    T Run(Func<T> myFun) 
    return myFun() 

    void SomeMethod() 
    Run(() => whatever()) 

,然後myFun總是相同的對象,或者一個新的對象?或者以稍微不同的方式制定......如果我鎖定它,是否會阻止並行執行?

+0

你問是否'()=>無論()'每次創建一個新的委託對象? –

+0

@ LasseV.Karlsen:是的。 – FrankyBoy

+1

如果你不知道如何創建一個對象,那麼你就不能確定該對象是否適合存儲鎖定狀態。對於GetType()爲true,對於* this *爲true,對於方法參數爲double,對於委託對象爲triple-true。總是,*總是*用'new object()'創建自己的對象。 –

回答

2

此:

() => whatever() 

創建每次新的委託對象。

這意味着,如果兩個線程都在同一時間打電話SomeMethod,然後他們每個人都會構建自己的代表,並把裏面Run鎖將無法保證只有一個線程可以運行傳遞給它Run委託。

You can test this in this .NET Fiddle

+0

該死的,儘可能多的想法,但希望我錯了。還有整潔的網站,不知道那一個。 – FrankyBoy

相關問題