如何在Lambda中使用async/await

编程入门 行业动态 更新时间:2024-10-10 07:22:58
本文介绍了如何在Lambda中使用async/await的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

如何在lambda表达式中正确使用async/await关键字?这是代码:

How can I use the async/await keywords correctly in a lambda expression ? here is the code :

public async Task<IHttpActionResult> GetUsers() { var query = await _db.Users.ToListAsync(); var users = query.Select(async u => new { FirstName = u.FirstName, LastName = u.LastName, IsGeek = await _userManager.IsInRoleAsync(u.Id, "Geek") }); return Ok(users); }

如您所见,此代码在webapi控制器中运行,它可以编译而没有任何错误,问题在于它需要在某个地方添加 extra (await),因为此操作永远不会恢复.

As you can see this code is running inside a webapi controller, it compiles without any error, the problem is it needs an extra await somewhere because this action never retuns.

请注意,_db和_usermanager是应用程序的DbContext和UserManager.

Notice that _db and _usermanager are the DbContext and the UserManagerfor the application.

谢谢.

更新:

此等效代码永远不会失败(但它不是优美的:():

This equivalent code never fails (but it's not ellegant :( ):

var query = await _db.Users.ToListAsync(); var users = new List<object>(); foreach (var u in query) { bool IsGeek = await _userManager.IsInRoleAsync(u.Id, "IsGeek"); users.Add( new { FirstName = u.FirstName, LastName = u.LastName, IsGeek= IsGeek }); } return Ok(users);

推荐答案

考虑您的类型.

var query = await _db.Users.ToListAsync();

query是用户列表.

var users = query.Select(async u => new { FirstName = u.FirstName, LastName = u.LastName, IsGeek = await _userManager.IsInRoleAsync(u.Id, "Geek") });

当您使用async lambda Select时,结果是任务序列.因此,要(异步)等待所有这些任务完成,请使用Task.WhenAll:

When you Select with an async lambda, the result is a sequence of tasks. So, to (asynchronously) wait for all those tasks to complete, use Task.WhenAll:

var result = await Task.WhenAll(users); return Ok(result);

更多推荐

如何在Lambda中使用async/await

本文发布于:2023-11-28 04:46:35,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1641006.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何在   Lambda   await   async

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!