我需要修改一个现有的程序,它包含以下代码:
var inputs = events.Select(async ev => await ProcessEventAsync(ev))
.Select(t => t.Result)
.Where(i => i != null)
.ToList();
但这对我来说似乎很奇怪,首先在select中使用async
和__abc1。根据斯蒂芬·克利里的这个答案,我应该能够放弃这些。
然后是第二个Select
,它选择结果。这是否意味着任务根本不是异步的,而是同步执行的(如此多的努力是徒劳的),或者任务将异步执行,当它完成时,执行查询的其余部分?
根据斯蒂芬·克利里的另一个回答,我是否应该像下面这样编写上面的代码:
var tasks = await Task.WhenAll(events.Select(ev => ProcessEventAsync(ev)));
var inputs = tasks.Where(result => result != null).ToList();
这是完全一样的吗?
var inputs = (await Task.WhenAll(events.Select(ev => ProcessEventAsync(ev))))
.Where(result => result != null).ToList();
当我在这个项目上工作时,我想改变第一个代码示例,但我不太热衷于改变(显然工作)异步代码。也许我只是担心什么,所有3个代码样本做完全相同的事情?
processevensasync看起来像这样:
async Task<InputResult> ProcessEventAsync(InputEvent ev) {...}