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任务吗?或执行不会按预期工作?
谢谢,我没想到会有快速反应!答案 0 :(得分:5)
lambda创建匿名方法或表达式树,具体取决于它是否在接受委托或Expression<...>
类型的上下文中使用。在那些创建匿名方法的情况下,它就像你明确地编写方法一样。捕获的变量可能会在方法定义的位置发生变化,但它始终是运行时所看到的真实方法。 async
关键字不会改变这一点。