2014-02-18 61 views
1

我是Tasks的新手,仍然試圖理解這個概念。
雖然做了一些研究,我橫跨this文章來與下面的代碼行:任務和lambda表達式語法

Task<int32> t = new Task<int32>(n => Sum((Int32)n), 1000); 

從例子,據我所知,1000被作爲參數傳遞給Sum功能過去了,但我似乎並沒有瞭解語法。

我的問題是編譯器如何知道它應該取代n1000當Sum被調用?

回答

5

lambda的參數在=>之前用lambda表示爲n。然後n作爲參數傳遞給在lambda表達式體內調用的Sum()方法。

如果我重寫lambda表達式作爲一個代表,它可能是更清楚你:

Task<Int32> t = new Task<Int32>(
    delegate(Int32 n) { return Sum((Int32)n); }, 
    1000); 

一旦Task執行它不是在編譯時而是在運行時更換。

+0

謝謝,我的錯誤是我錯過了'任務(Func 函數,對象狀態)的重載; –