代码之家  ›  专栏  ›  技术社区  ›  Matthias Burger

MVC中的返回视图是一个优势,为什么它不存在呢?

  •  0
  • Matthias Burger  · 技术社区  · 7 年前

    我希望这仍然是一个话题。在本文中,我看到了如何创建 await ViewAsync() Returning a view with async keyword

    所以我的考虑是:好的,我想让我的应用程序使用多线程,让我们 BaseController ViewAsync :

    只是其中的一部分:

    public class BaseController : Controller
    {
        [NonAction]
        public virtual async Task<ViewResult> ViewAsync()
        {
            return await Task.Run(() => this.View(null));
        }
    
        [NonAction]
        public virtual async Task<ViewResult> ViewAsync(string viewName)
        {
            return await Task.Run(() => this.View(viewName, this.ViewData.Model));
        }
    
        // the other implementations....
    }
    

    [HttpGet]
    public async Task<IActionResult> DoSomething()
    {
        // maybe we need to do something here, maybe not
    
        return await ViewAsync(new DoSomethingObject());
    }
    

    我的优势/目标是性能,因为我现在总是可以使用多线程。

    我考虑得对吗? 在帖子中,对答案的评论以 I wouldn't do this . 但投票/评论/答案并不多。。这种实施的风险或缺点在哪里?也许,为什么不 Microsoft.AspNetCore.Mvc.Controller 带着方法来 视图异步 ?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Andrei Tătar    7 年前

    任何web应用程序都已使用多线程。当请求传入时,来自线程池的线程将处理它。您的应用程序已同时处理多个请求,而您不必使用 Task.Run .

    开始新任务 任务。运行 除非 你在做一些CPU密集型的工作。假设您有一个端点,它在每次请求时计算最多n个质数,在这种情况下,您可以在默认线程池上委托一个新任务,该线程池返回质数,并有一个视图将它们呈现为一些html。

    呈现一个视图并没有异步,因此不需要viewsync。为视图准备数据可能是异步的,但呈现不是。而且,有一个 ViewAsync