【问题标题】:ASP.NET MVC4 Async controller - Why to use?ASP.NET MVC4 异步控制器 - 为什么要使用?
【发布时间】:2013-02-17 20:46:19
【问题描述】:

我试图了解为什么以及何时应该使用async 控制器操作。最终,当我在其中使用await 时,它将等待操作完成以返回视图。

例如

public async Task<ActionResult> TryMe()
{
   await SomeActionAsync();
   return View();
}

在这种情况下,如果我使用async 或不使用asyncAction 将花费相同的时间来执行。

如果我不尝试并行运行至少 2 个慢速操作(不相互依赖),我看不出有任何理由使用 async 控制器操作。

如果我错了,请纠正我。我想我在这里遗漏了一些东西。

【问题讨论】:

    标签: asp.net asynchronous asp.net-mvc-4 task-parallel-library async-await


    【解决方案1】:

    await 关键字的意义在于让您使用异步操作而无需编写丑陋的回调。

    使用异步操作有助于避免浪费线程池线程。

    说明

    ASP.Net 在托管线程池的线程中运行您的所有代码。
    如果一次运行的慢请求太多,线程池将满,新的请求需要等待线程释放。

    但是,您的请求通常很慢并不是因为它们正在执行计算(计算绑定),而是因为它们正在等待其他东西,例如硬盘、数据库服务器或外部 Web 服务(IO - 或网络绑定)。

    仅仅为了等待外部操作完成而浪费宝贵的线程池线程是没有意义的。

    异步操作允许您启动操作,将线程返回到池中,然后在操作完成后“唤醒”另一个线程池线程。
    在操作运行期间,不消耗任何线程。

    【讨论】:

    • 所以,你的意思是我应该使用异步方法(如你所说的操作(DB、文件系统、WS 等)来释放线程池?因为执行时间会两种方式都保持不变。当我尝试运行这样的操作时,始终使用异步是最佳做法吗?
    • @DorR:是的。请注意,并非所有操作都必须具有异步实现。 .Net 4.5 中的大多数非 CPU 绑定方法现在都有异步对应项,但第 3 方库不太可能。
    • Steve Sanderson 的精彩演讲展示了 ASP.NET 中的异步功能:channel9.msdn.com/Events/TechDays/Techdays-2012-the-Netherlands/… 该演示文稿还清楚地展示了使用异步方法可能带来的性能优势。
    • 所以在应用中使用这个关键字非常好。在小和大。对吗?
    • @Tim:只有在有非阻塞(非计算绑定)工作时才应该使用异步。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 2017-03-24
    • 2011-02-19
    • 1970-01-01
    相关资源
    最近更新 更多