当前位置: 移动技术网 > IT编程>开发语言>.net > .net4.5新特性之异步编程(Async和Await)的使用

.net4.5新特性之异步编程(Async和Await)的使用

2018年11月04日  | 移动技术网IT编程  | 我要评论

周璇日记,莆田婚纱摄影哪家好,五年级数学手抄报

一、简介

  首先来看看.net的发展中的各个阶段的特性:net 与c# 的每个版本发布都是有一个“主题”。即:c#1.0托管代码→c#2.0泛型→c#3.0linq→c#4.0动态语言→c#4.5异步

 

  下面我来简单的介绍一下异步编程:异步编程,在 .net framework 4.5 和 windows 运行时利用异步支持。 编译器可执行开发人员曾进行的高难度工作,且应用程序保留了一个类似于同步代码的逻辑结构。 因此,你只需做一小部分工作就可以获得异步编程的所有好处。 

 

  所谓的异步编程是利用cpu空闲时间和多核的特性,它所返回的task或task<tresult>是对await的一个承诺,当任务执行完毕后返回一个结果给接收者。这里看到这个可能各位不太明白,不要紧,下面会有讲解。

 

二、使用说明

方法签名包含一个 async 或 async 修饰符。

 

按照约定,异步方法的名称以“async”后缀结尾。

 

返回类型为下列类型之一:

 

如果你的方法有操作数为 tresult 类型的返回语句,则为 task<tresult>。

 

如果你的方法没有返回语句或具有没有操作数的返回语句,则为 task。

 

如果你编写的是异步事件处理程序,则为 void(visual basic 中为 sub)。

 

有关详细信息,请参见本主题后面的“返回类型和参数”。

 

方法通常包含至少一个 await 表达式,该表达式标记一个点,在该点上,直到等待的异步操作完成方法才能继续。 同时,将方法挂起,并且控件返回到方法的调用方。(这里所谓的挂起就是上文所提到的承诺,异步方法承诺会给调用方一个结果)

 

三、示例

  实践才是检验真知的最佳途径。

 

 

using system;

using system.diagnostics;

using system.net.http;

using system.threading.tasks;

 

namespace 异步递归

{

    class program

    {

        static void main(string[] args)

        {

            stopwatch stopwatch = new stopwatch();

            stopwatch.start();

            consoleasync1();

            stopwatch.stop();

            console.writeline("同步方法用时:" + stopwatch.elapsedmilliseconds);

            stopwatch.reset();

            stopwatch.start();

            consoleasync();

            stopwatch.stop();

            console.writeline("异步方法用时:"+ stopwatch.elapsedmilliseconds);

 

            console.read();

        }

 

        private static async void consoleasync()

        {

            console.writeline("异步方法开始");

            console.writeline("result:" + await sumasync(10));

            console.writeline("异步方法结束");

        }

        private static async task<int> sumasync(int part)

        {

            if ((part += 10) >= 100)

            {

                return 100;

            }

            httpclient client = new httpclient();

            task<string> getstringtask = client.getstringasync("https://msdn.microsoft.com");

            console.writeline(datetime.now.millisecond + " 异步 " + (await getstringtask).length);

            return await sumasync(part);

        }

 

        private static void consoleasync1()

        {

            console.writeline("同步方法开始");

            console.writeline("result:" + sumasync1(10));

            console.writeline("同步方法结束");

        }

 

        private static int sumasync1(int part)

        {

            if ((part += 10) >= 100)

            {

                return 100;

            }

            httpclient client = new httpclient();

            task<string> getstringtask = client.getstringasync("https://msdn.microsoft.com");

            console.writeline(datetime.now.millisecond + " 同步 " + getstringtask.result.length);

            return sumasync1(part);

        }

    }

}

 

  示例介绍:

 

    1、这个例子中有两种实现方式:(1)利用异步编程的方式实现(2)利用普通同步方式实现

 

    2、同时这个例子中实现了递归,这个可以不用考虑,博主只是想验证一下在异步的情况下,递归是否有效而已,实验结果为有效。

 

    3、这段代码中的getstringasync()方法是获取远程界面内容用的,主要目的是延长响应时间。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网