代码之家  ›  专栏  ›  技术社区  ›  Jalpesh Vadgama

返回具有async关键字的视图

  •  12
  • Jalpesh Vadgama  · 技术社区  · 7 年前

    这里有一些代码示例,我在其中展示了一些如下的代码。

     public async Task<IActionResult> AddUser(User user)
     {
          ///Logic to add user
          return View();
     }
    

    当视图结果本身不支持异步时,使用异步操作结果方法返回视图是一种好做法吗。

    1 回复  |  直到 7 年前
        1
  •  15
  •   Bob Dust    7 年前

    async await MSDN(如果我没记错的话:)说:“这是一个很好的做法,可以使您的web应用程序具有可扩展性。”。基本上,它有助于利用您的线程池,因此只有一个线程可以这样做 只有1个 要求假设您有以下操作:

     public async Task<IActionResult> AddUser(User user)
     {
          ///Logic to add user
          return await Task.Run(() => View());
     }
    

    这个 标记修饰符是为了告诉.NET运行时这是一个可以应用上述机制的工作项。没有 等候

    为了验证概念,我在我的 HomeController :

        public async Task<ActionResult> FineGrained()
        {
            return await Task.Run(() => {
                return Json(Thread.CurrentThread.ManagedThreadId, JsonRequestBehavior.AllowGet);
            });
        }
    
        public async Task<ActionResult> CoarseGrained()
        {
            return await Task.Run(async () => {
                await Task.Delay(TimeSpan.FromSeconds(5));
                return Json(Thread.CurrentThread.ManagedThreadId, JsonRequestBehavior.AllowGet);
            });
        }
    

    这是测试线程利用率的jquery脚本:

            $.when(
                $.getJSON('/Home/FineGrained'),
                $.getJSON('/Home/CoarseGrained'),
                $.getJSON('/Home/FineGrained'),
                $.getJSON('/Home/FineGrained'),
                $.getJSON('/Home/FineGrained')
            ).done(function (v1, v2, v3, v4, v5) {
                console.log(v1[0]);
                console.log(v2[0]);
                console.log(v3[0]);
                console.log(v4[0]);
                console.log(v5[0]);
            });
    

    30 25 30 25