首页 > 解决方案 > 如何同时使用 FindByNameAsync 和 FindByIdAsync 检查用户

问题描述

如何在此用户变量中同时检查 id && username 以将其作为第一个参数传递给 CheckPasswordSignInAsync 方法,谢谢

        var user = await _userManager.FindByNameAsync(userForLoginDto.UserName);
                    await _userManager.FindByIdAsync(userForLoginDto.Id);

标签: c#webapi

解决方案


传递要并行运行的任务,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));

推荐阅读