首页 > 解决方案 > 是否需要“ 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-awaittask

解决方案


我对 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 线程推开并保持响应的正常模式。


推荐阅读