c# - 是否需要“ return await Task.Run(() => PartialView()) ”?
问题描述
我对 c# 中的 async 和 await 有所了解。但是我看到了这种返回视图的方法,如图所示。所以我想知道这种方法是如何工作的?
我已经这样做了,
public async Task<PartialViewResult> SamplePartialPage()
{
ViewBag.countryList = await db.CountryList.ToListAsync();
return PartialView();
}
但不是这个。
public async Task<PartialViewResult> SamplePartialPage()
{
ViewBag.countryList = await db.CountryList.ToListAsync();
return await Task.Run(() => PartialView());
}
解决方案
我对 c# 中的 async 和 await 有所了解。
我建议阅读我的异步介绍和异步最佳实践。还有很多其他很棒的资源。由于您使用的是 ASP.NET,因此您还应该阅读async on ASP.NET。
我想知道为什么有些人使用第二种行为?
在 ASP.NET 上,没有充分的理由使用await Task.Run
. await Task.Run
将工作安排到线程池线程并释放当前线程。但是在 ASP.NET 上,代码已经在线程池线程上运行,因此await Task.Run
只会导致线程切换,根本没有任何好处。
这是其他场景中的有效模式;具体来说,如果您在客户端 GUI 应用程序的 UI 线程上,那么 usingawait Task.Run
是一种将工作从 UI 线程推开并保持响应的正常模式。
推荐阅读
- node.js - 无法在中间件中获取 JWT 令牌
- java - 为什么在 pom.xml / maven 中有排除依赖项的选项?
- shell - 来自 Dockerfile 的 .sh 脚本 RUN 的结果未保存到映像
- sql-server-2008 - SQL Server Update Case When Then 语句
- django - 基于 Django 函数的视图 get_form_kwargs
- android - 即使在包含 lint 操作之后也没有创建 jar
- angularjs - 剑道网格导出到 excel - 从右到左支持
- function - CMake:如何从函数内部修改变量
- node.js - 当我通过 app.js 中的 foreach 添加路由时,Router.use() 抛出错误
- php - cURL 错误 56:在发送 xml 请求时从对等方接收数据失败