任务和lambda表达式语法

时间:2014-02-18 05:20:28

标签: c# syntax lambda task-parallel-library

我是Tasks的新手,仍在努力掌握这一概念 在做一些研究时,我遇到了this文章,其中包含以下代码:

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

从示例中,我了解1000作为参数传递给Sum函数,但我似乎不理解语法。

我的问题是,当调用Sum时,编译器如何知道应该用n替换1000

1 个答案:

答案 0 :(得分:5)

lambda的参数在n之前在lambda中表示为=>。然后将n作为参数传递给在lambda表达式主体内调用的Sum()方法。

如果我将lambda表达式重写为委托,那么你可能会更清楚:

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

在执行Task时,它不会在编译时替换,而是在运行时替换。