异步lambda的执行有什么不同吗?

时间:2017-10-11 07:11:45

标签: c# linq lambda async-await

这是一个愚蠢的问题,但不知何故,它让我觉得我错过了一些东西。异步lambda和普通方法的执行有什么区别吗?喜欢这个

var tasks = list.Select(async c => { /* await somewhere */});
await Task.WhenAll(tasks);

那个

async Task<object> GetSomething(object c) { /* await somewhere */}
// ...
var task = list.Select(GetSomething);
await Task.WhenAll(tasks);

编辑:我在问,因为我有误解,如果lambda的行为可能与普通方法不同。如果lambda和方法都具有相同的主体,lambda可能会创建一个void任务吗?或执行不会按预期工作?

谢谢,我没想到会有快速反应!

1 个答案:

答案 0 :(得分:5)

lambda创建匿名方法或表达式树,具体取决于它是否在接受委托或Expression<...>类型的上下文中使用。在那些创建匿名方法的情况下,它就像你明确地编写方法一样。捕获的变量可能会在方法定义的位置发生变化,但它始终是运行时所看到的真实方法。 async关键字不会改变这一点。