是否需要“ return wait Task.Run(() => PartialView()) ”?

Tha*_*eem 2 c# task async-await

我对c# 中的async 和await 了解一些。但我看到了如图所示的返回视图的方法。所以我想知道这个方法是如何实现的?

我已经做到了这一点,

public async Task<PartialViewResult> SamplePartialPage()
{
    ViewBag.countryList = await db.CountryList.ToListAsync();
    return PartialView();
}
Run Code Online (Sandbox Code Playgroud)

但不是这个。

public async Task<PartialViewResult> SamplePartialPage()
{
    ViewBag.countryList = await db.CountryList.ToListAsync();
    return await Task.Run(() => PartialView());
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*ary 6

我对c# 中的async 和await 了解一些。

我建议阅读我的异步介绍异步最佳实践。还有很多其他很棒的资源。由于您使用的是 ASP.NET,因此您还应该阅读ASP.NET 上的 async

我想知道为什么有些人会使用第二种行为?

在 ASP.NET 上,没有充分的理由使用await Task.Run. await Task.Run将工作安排到线程池线程并释放当前线程。但在 ASP.NET 上,代码已经在线程池线程上运行,因此await Task.Run只会导致线程切换,并且根本没有任何好处。

这在其他场景中有效的模式;具体来说,如果您位于客户端 GUI 应用程序中的 UI 线程上,则使用await Task.Run是一种正常模式,可将工作从 UI 线程中推开并保持响应。