繁体   English   中英

异步(一项任务)在 MVC 中有意义吗?

[英]Does async (one task) make sense in MVC?

我在 MVC 中使用 async/await,但仅当我有多个任务 (WaitAll) 时。

我知道只有一项任务可以让 UI 免费(在 WPF 或 Windows Form 的情况下),但是对于 MVC 来说,只有一项任务并等待它是否有意义?

我在 MVC 中的代码中看到了很多,但我没有得到它的优势。

HTTP 请求由线程池线程处理。

如果你阻塞一个线程,它将无法做其他工作。 因为线程总数是有限的,这会导致线程池饿死,新请求将被拒绝 - 503。

使用异步代码,线程被释放回线程池,可用于处理新请求或异步代码的延续。

就像在客户端 UI 上一样,在服务器上,异步代码完全是关于响应性,而不是性能。 请求将需要更长的时间,但您的服务器将能够处理更多的请求。

这取决于您要实现的目标。 例如,如果您多次调用多个服务,您可以始终以仅最后一次调用使系统的其余部分“等待”的方式进行调用。

您可以通过 X 异步调用服务(几乎)同时启动的方式优化代码,而不必“等待”彼此。

 public async Task RunSomethings()
    {
        var something1 = AsyncCall1();
        var something2 = AsyncCall2();
        var something3 = await AsyncCall3();
    }

    private async Task<Something1> AsyncCall1()
    {
        return await Something1();
    }

    private async Task<Something2> AsyncCall2()
    {
        return await Something2();
    }

    private async Task<Something3> AsyncCall3()
    {
        return await Something3();
    }

我希望它有帮助。

好问题。 使用异步方法就是有效地使用资源并提供良好的用户体验。 任何时候您需要调用可能需要时间来收集的资源,最好使用异步调用。

这将做一些事情。 首先,当一个工作线程正在等待数据时,可以这么说,它可以被“搁置”,并且该工作线程可以做其他事情,直到返回数据、返回错误或调用超时。

这将为您提供第二个优势。 用户用来调用资源的接口将被暂时释放,以做其他事情。 总的来说,空闲进程消耗的服务器资源更少。

我建议在此处观看此页面上的视频:https ://channel9.msdn.com/Series/Three-Essential-Tips-for-Async

这可能是最清楚的解释,可以帮助您跨越异步学习。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM