代码之家  ›  专栏  ›  技术社区  ›  kudlatiger

在Web API中编写API方法时,如何使用async/await启用异步行为

  •  0
  • kudlatiger  · 技术社区  · 6 年前

    我写了下面的ASP.NET API代码来返回员工数据

    public async Task<IActionResult> employeegroups()
    {
        try
        {
            var employeegroups = _context.EmployeeGroups.Select(p => new EmployeeGroupsEntity()
            {
                id = p.Key,
                name = p.Name
            }).ToList();
    
            return Ok(employeegroups);
        }
        catch
        {
            return BadRequest();
        }
    }
    

    我得到这个警告:

    此异步方法缺少“await”运算符,将同步运行。考虑使用“Acess”操作符等待非阻塞API调用,或“等待任务.Run(…)”在后台线程上执行CPU绑定的工作。

    所以,我试着加上“等待”:

    var employeegroups = await _context.EmployeeGroups.Select(p => new EmployeeGroupsEntity()
    {
        id = p.Key,
        name = p.Name
    }).ToList();
    

    列表“EmployeeGroupsEntity”不包含“GetAwaiter”的定义,并且找不到接受列表“EmployeeGroupsEntity”类型的第一个参数的扩展方法“GetAwaiter”(是否缺少using指令或程序集引用?)

    这是我的模型:

    public class EmployeeGroupsEntity
    {
        public Guid id { get; set; }
        public string name { get; set; }
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Ehsan Sajjad    6 年前

    当我们与 Task<T> async 我们也应该使用关键字 await 关键字,该关键字将确保调用线程未被阻止,并将在 等待 . 所以你应该打电话给 ToListAsync 方法 等待

    var employeegroups = await _context.EmployeeGroups.Select(p => new EmployeeGroupsEntity()
            {
                id = p.Key,
                name = p.Name
            }).ToListAsync();