为什么我们可以使用这样的任务?

时间:2012-10-13 00:09:31

标签: c# .net c#-4.0

task.ContinueWith( x => Process(x));

task.ContinueWith( Process)

我想知道为什么两者都有效?

我认为ContinueWith至少需要一个Task

参数

4 个答案:

答案 0 :(得分:5)

lambda表达式正在转换为方法组。

  

13.6方法组转化

     

与§13.5中描述的隐式匿名方法转换类似,存在隐式转换   从方法组(第14.1节)到兼容的委托类型。如果D是   委托类型,E是分类为方法的表达式   当且仅当E至少包含时,D才与E兼容   一种适用于其正常形式(§14.4.2.1)的方法   参数列表(§14.4.1)具有与之匹配的类型和修饰符   D.的参数类型和修饰符。

     

编译时的应用程序   从E到D的转换与编译时处理相同   委托创建表达式新D(E)(§14.5.10.3)。注意   从E到D的隐式转换的存在只表明   适用方法的集合不是空的,但不是   保证转换的编译时应用程序   成功没有错误。

有关示例,请参阅http://en.csharp-online.net/ECMA-334:_13.6_Method_group_conversions

答案 1 :(得分:0)

这两行基本上是一回事。较低的一个是方法调用,它上面的lambda表达式正被转换为类似的方法调用。同样的事情,只是表达不同。

答案 2 :(得分:0)

因为ContinueWith期望Action<Task>作为参数而Process具有正确的签名以及(x) => Process(x)

答案 3 :(得分:0)

x =&gt; Process(x)正在创建一个委托。

委托是引用方法的类型。

任务表示异步操作。

Action是一种委托。