执行此基本操作:
[HttpGet]
public IActionResult Index()
{
return View();
}
修改它以使用异步/等待:
[HttpGet]
public async Task<IActionResult> Index()
{
return await Task.Run(() => View());
}
我很困惑这是否会改进我的代码。根据我的理解,await 关键字将释放调用线程,以便它可以在其他地方使用,这是更好地利用可用线程。
但我实际上并没有做任何其他事情,除了这件返回 View 的事情。使用 async 关键字实际上在编译代码中引入了状态机,这增加了复杂性。
让这个 Action 异步值得吗?有没有更好的方法来修改它以使其异步?
最佳答案
简短的回答是否定的。因为什么都没有async
继续 View()
在执行中没有任何地方可以让编译器释放线程以允许在同一线程上进行其他工作。
我想说的是,使这个特定方法异步可能(甚至稍微)降低性能,因为编译器将需要修改您的代码,使执行的代码更加复杂,一旦您使用 async
关键字。
制作它的唯一好处async
如果您有许多其他操作实际上正在利用 async
,我可以看到这是为了保持一致性.如果你真的想拥有一个Task<T>
出于一致性目的的签名,您可以考虑:
public Task<IActionResult> Index()
{
return Task.FromResult(View());
}
(注意没有 async
涉及关键字,也没有 Task.Run
启动新任务运行)
关于c# - 只返回 View 的 Controller Action 是否有必要异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52538345/