【问题标题】:.Net Task Controller methods with no async await [duplicate]没有异步等待的.Net任务控制器方法[重复]
【发布时间】:2020-02-11 14:47:27
【问题描述】:

在 .Net 中,如果您的任务控制器方法没有异步等待它的任何操作及其依赖项的操作(例如也是不包含异步等待的任务方法的服务类),会发生什么情况。

例如 RoomController.cs:

[HttpGet]
public Task<List<Room>> GetRooms()
{
    return _roomService.GetRoomsAsync();
}

... RoomService.cs:

    public Task<List<Room>> GetRoomsAsync()
    {
        return _context.Rooms.ToListAsync();
    }

这会导致问题或缺点吗?

【问题讨论】:

  • 你能用一个例子说明你所说的“没有异步等待”是什么意思吗?
  • 完成,方法声明中没有异步,异步调用也没有等待
  • 不,这种方法不会造成问题。会有一个中间件代码等待控制器动作任务完成。

标签: .net .net-core controller async-await task


【解决方案1】:

在 web-API 方法中使用异步等待操作,您的当前线程不会等待 I/O 操作: 作为代码中的示例:

 return _context.Rooms.ToListAsync();

这段代码对数据库有一个 I/O 操作,使用 async-await 导致当前线程可以响应另一个请求并且不会阻塞 I/O。 因此,您的应用程序的吞吐量将在不使用任何多线程技术的情况下增加。这是非常有益的,不是吗!?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 2018-04-21
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多