c# - 如何同时使用 FindByNameAsync 和 FindByIdAsync 检查用户
问题描述
如何在此用户变量中同时检查 id && username 以将其作为第一个参数传递给 CheckPasswordSignInAsync 方法,谢谢
var user = await _userManager.FindByNameAsync(userForLoginDto.UserName);
await _userManager.FindByIdAsync(userForLoginDto.Id);
解决方案
传递要并行运行的任务,Task.WhenAny
然后获取第一个完成任务的结果:
var completedTask = await Task.WhenAny(
FindByNameAsync(userForLoginDto.UserName),
FindbyIdAsync(userForLoginDto.Id));
var user = await completedTask;
注意:通常您不应该对同一数据库中的相同数据运行并行搜索。按主键搜索应该是最快的。
如果要检查用户名是否被其他用户占用,则只需按用户名搜索并检查返回用户的 id(如果有)。
更新:如果这些搜索是独立的,并且您只想并行运行它们并获得所有结果,那么使用Task.WhenAll
- 它会在所有任务完成后返回数组或结果:
var users = await Task.WhenAll(
FindByNameAsync(userForLoginDto.UserName),
FindbyIdAsync(userForLoginDto.Id));
推荐阅读
- javascript - 无法访问 iframe #document puppeteer 中的属性或 iframe
- fortran - 如何在 Linux 中使用 lapack、odepack 等 fortran 库
- ios - 如何使用“使用 Apple 登录”测试注册流程
- awkward-array - 有没有办法在没有 fromiter() 的情况下堆叠 JaggedArrays?
- python - 在 pytest-django 中的每次测试后清理数据库
- r - 导入不带日期的时间序列时(仅 hh:mm:ss)R 决定将所有时间戳设置为 1899-12-31
- c# - 显示控件列表的 Visual Studio 表单设计器
- angular - Angular 8 HttpClient:无法处理文本/csv 服务器响应
- python-3.x - 无法在 seaborn.relplot 中设置行顺序
- php - 如何简化以下 PHP PDO 连接代码?