我是Tasks
的新手,仍在努力掌握这一概念
在做一些研究时,我遇到了this文章,其中包含以下代码:
Task<int32> t = new Task<int32>(n => Sum((Int32)n), 1000);
从示例中,我了解1000
作为参数传递给Sum
函数,但我似乎不理解语法。
我的问题是,当调用Sum时,编译器如何知道应该用n
替换1000
。
答案 0 :(得分:5)
lambda的参数在n
之前在lambda中表示为=>
。然后将n
作为参数传递给在lambda表达式主体内调用的Sum()
方法。
如果我将lambda表达式重写为委托,那么你可能会更清楚:
Task<Int32> t = new Task<Int32>(
delegate(Int32 n) { return Sum((Int32)n); },
1000);
在执行Task
时,它不会在编译时替换,而是在运行时替换。