2016 - 2024

感恩一路有你

怎么实现.NET网站异步处理?

浏览量:1413 时间:2019-09-17 10:08:24 作者:
网友解答:

在架构领域,我们经常听见别人说“异步”,另外大家在面试中也经常会遇到这方面的问题。

什么是异步?

说到.NET异步,先来说几个比较容易混淆的概念:

1、多线程:一般指同一进程中多个线程协作运行。在多核计算机中多个线程将有机会同时运行于多个核上,如果线程中进行的是计算,则行成并行计算。

2、并行:一般指并行计算,是说同一时刻有多条指令同时被执行,这些指令可能执行于同一CPU的多核上,或者多个CPU上,或者多个物理主机甚至多个网络中。

3、异步:与同步相对应,是指呼叫另一操作后,不等待其结果,继续执行之后的操作,若之后没有其他操作,当前线程将进入睡眠状态,而CPU时间将有机会切至其他线程。在异步操作完成后通过回调函数的方式获取通知与结果。

在Web中为什么要使用异步?

在 web 应用程序看到大量在启动时的并发请求或具有突发负载 (其中会增加并发情况突然),进行异步 web 服务调用将增加你的应用程序的响应能力。 异步请求采用相同量的时间来处理与同步请求。

例如,如果某个请求生成 web 服务调用,则需要两秒钟来完成,请求所执行的两秒内是否执行同步或异步。 但是,在异步调用,线程则无需必须等待第一个请求完成时响应其他请求。 因此,异步请求可以防止出现请求排队和线程池增长时有许多并发请求调用长时间运行的操作。

异步的实现方式

异步的实现方式有多种,比如多线程。多线程将异步操作放入另一线程中运行,通过轮询或回调方法得到完成通知。

多线程实现异步调用可以采用传统的Thread类来实现,Task来实现以及 async/await 关键字实现。

对于Thread来说,当多个异步方法需要协助时,代码将显得十分复杂,为此我们需要一个更好的异步模型,从.NET4开始,引入了新的异步模型。下面来看一段代码:

我们不再关心任务如何去开始,何时会结束,一切变成了一些有关或无关的任务。

对于封装一个由多个异步方法组合成的异步方法, 组合异步方法调用后,按顺序调用第一个异步方法,紧接着,产生需要的结果Task后返回。异步方法完成时回调指定的方法,并按顺序继续调用,所有方法完成后,把运行的最终结果设置给结果Task,那么整个任务即完成。 如果异步方法有返回值,那么组合的异步方法看上去会复杂一点。类似下图所示:

为了解决这个问题,微软提供了一个非常好用的语法糖:async/await 关键字。下面我们来看一段代码:

他几乎和同步方法书写一致,代码量也比较少,程序的逻辑也很清晰,当然可读性更强。

总结

关于.NET网站异步处理分享到这里,这里做个总结:

1、.NET网站异步处理可以采用3中方式实现:Thread,Task,async/await;

2、Task出现是为了Thread的不足,async/await出现也是为了弥补Task的不足。大家有没有发现这个关系就像一条线一样。其实说到底这些都是多线程技术,底层都是Thread实现,只不过微软为了代码的可读性以及逻辑的清晰性,做了语法糖,从而更加方便开发人员使用。

3、在C#5中,添加了 async/await 关键字,使得上面遗留的问题得以解决,而且重点是,用起来非常简单!

4、NET Framework 4 引入了异步编程概念, ASP.NET 4.5 支持任务, 于是就有了async/await 。

以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更多科技知识!

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。