栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

C# async 异步知识学习

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C# async 异步知识学习

1、什么是同步,什么是异步?

        异步,在计算机编程中,是指独立于主程序流程和处理此类事件的方式的事件的发生。这些可能是“外部”事件,例如信号的到达,或者由程序发起的与程序执行同时发生的动作,而程序不会阻塞以等待结果(from 维基百科)。这里比较重要的就是最后一句,程序不会阻塞以等待结果。如下图所示,同步(synchronous)就是需要在processB执行完并返回结果后才会继续执行后续的processA,一旦processB的执行发生意外,整个程序将会阻塞,无法继续执行。而异步(asynchronous)则是在调用processB的同时也能执行其他不需要等待processB返回结果的任务,使整个主流程不会因processB发生的问题而中断。

        异步可以用另一个词语来描述,并行:即多个任务同时执行。如上述例子所示,异步代表着,processA不依赖processB结果的部分 与 processB 在同时执行,并行发生。这样的好处并不仅仅在于节省效率,将计算机多余的算力充分应用,更是能优化HTTP协议中的APi调用流程,使用异步方法时,应用程序将继续响应 UI。 

2、 如何在C#中使用异步编程

        在C#中官方已经引入了异步编程, 在.NET Framework 4.5 或更高版本以及 .NET Core中均支持异步编程,且保留了一个类似于同步代码的逻辑结构。C#中对于异步编程有三个重要的关键词:

async: 方法前缀,用于表明该方法是异步方法。

eg:public async Task GetUrlContentLengthAsync() {}

await:指定需要执行异步调用的位置。如果在async方法中,并没有使用await关键字,将依然会当成同步方法执行。

eg:string contents = await getStringTask;

Task:所有async方法的返回结果必须是Task,TResult代表着原本应该返回的结果类型,如原本的同步方法返回值为int类型,改为异步方法后则是Task。如果是void,将只会返回Task。

###代码示例讲解

原理

        当异步方法执行时会将结果委托给他返回的Task,这时不代表该方法已经执行完毕,而是他做出一个承诺,我将会把我执行完后返回的结果存放在该Task中,你可以在后续需要的时候从该Task中获得(前提是已经执行完毕,不然将会等待直到其执行完毕)。而在完成结果的委托之后,该方法将会在后台继续执行,而控制权也已经返回给了异步方法的调用方,调用方可继续执行不依赖于之前异步方法返回值的其他流程。而当调用方已经执行完其他所有不依赖返回结果的方法后,改异步方法仍为执行完毕的话,调用方会同样将结果承诺进一个Task中,将其返回给上一层的调用方法中,逐级传递。因此想要最大化的把异步编程效果体现出来,就应该尽量将异步结果独立出来,并放置在方法最终返回前,以达到在异步完成前其他独立方法都已经执行完的效果。如果await放置在方法靠前的话,将会出现仅小部分采取了异步执行,在await之后的将都是同步执行。

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/983117.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号