task.ContinueWith( x => Process(x));
task.ContinueWith( Process)
我想知道为什么两者都有效?
我认为ContinueWith至少需要一个Task
参数答案 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是一种委托。