asyns和await实现传统的异步---------C#

传统的异步是利用回调函数来写的,写过的人都知道,,那样写的结构东一块西一块的,很不好找。

所以在这里整理啦一下asyns和await实现的异步。。。

asyns和await的异步不是很好理解。在这里,我在注释中,将细细的标明

 class Program
    {
        // ---------------规范说明-----------------------------
        //1.用async标识的方法即为异步方法,异步方法的返回值只能是void或者Task<object>,---返回值是void的方法,不能使用await调用。注意你的返回类型
        //2.在其他方法中调用异步方法时,可以加await,表示等待这个异步方法结束。 异步的关键点就在这个await
        //3.await标签只能写在异步方法中
        //4.await标识并调用的方法中,也必须要有await才行
        static void Main(string[] args)
        {
            //第一步,写了一个  “1”
            Console.WriteLine("1");

            Paint();
            //第三步----2,写了一个  “5”
            Console.WriteLine("5");

            Console.ReadLine();
        }

        //此方法是已经标明是异步方法
        async static void Paint()
        {
            //第二步,写了一个“2”
            Console.WriteLine("2");

            //第三步--1,代码发现await字段,整个方法将直接返回, 并在这个await这里加个标签,所以第三步输出的是“5”
            //等到 RequestBody方法返回值时,再次进入Paint方法中,并且直接从这个await字段处运行,

            //-----------------------------等待一秒---------这时候,已经输出了“5”

            //一秒后RequestBody方法返回值了,RequestBody的返回类型应该是Task<string>,
            //但是,用了await之后,返回值直接就是string
            //并且,输出“4”的操作被await阻塞
            Console.WriteLine(await RequestBody());
            Console.WriteLine("4");

        }

        async static Task<string> RequestBody()
        {
            //被await调用的方法中,必须要有await
            return await Task.Run(() =>
            {
                Thread.Sleep(2000);
                return "3";
            });
        }

    }
时间: 2024-08-27 17:45:40

asyns和await实现传统的异步---------C#的相关文章

折腾 async/await 调用传统 Begin/End 异步方法

最近在改进园子的图片上传程序,希望实现用户上传图片时同时将图片文件保存在三个地方:1)服务器本地硬盘:2)又拍云:3)阿里云OSS.并且在保存时使用异步操作. 对于异步保存到本地硬盘,只需用 Steam.CopyToAsync() 将上传文件流异步复制到 FileStream 即可. 对于异步保存至又拍云,只要借助 WebRequest.GetRequestStreamAsync() + Steam.CopyToAsync() 就可以实现. 而阿里云OSS提供了 .NET SDK,使用起来很方便

【笔记】记一次.net语法await和async的异步编程实验与笔记。

1.实践代码全记录: using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace await_测试 { class Program { static void Main(string[] args) { te

.NET4.5新特性async和await修饰符实现异步编程

开篇 每一个版本的.net都会引入一些新的特性,这些特性方便开发人员能够快速实现一些功能.虽然.net版本一直在更新,但是新版本对旧版本的程序都是兼容的,在这一点上微软做的还是非常好的.每次学一个新内容,第一次接触的方法在脑海里占的位置还是比较重要的,从刚开始接触.net的多线程编程是使用Thread类,然后后面写的程序只要用到异步或者多线程就马上会想到用Thread,虽然知道委托的异步调用也能够实现,但是脑海里面的排在前面还是Thread类,在那个时候不知道他们之间的区别和优劣,也就不懂得如何

关于async &amp; await(TAP)异步模型的异常捕获

在TAP之前,若要捕获线程中Task的异常,通常有两种办法: 1.阻塞:线程开始后,在适当的时机,调用 wait,或waitAll方法. 2.非阻塞(推荐):在建立任务的时候,写该task的continueWith方法,在该方法中捕获异常. 对于TAP时代,我们若要捕获一个带有asyn关键字的Task任务,用continueWith方法会捕获失败.注册全局的静态方法也不行. 阻塞式:和TAP之前一致. 非阻塞式:用 await Task.WhenAll() await t.Wait() awai

【转】【C#】C# 5.0 新特性——Async和Await使异步编程更简单

一.引言 在之前的C#基础知识系列文章中只介绍了从C#1.0到C#4.0中主要的特性,然而.NET 4.5 的推出,对于C#又有了新特性的增加--就是C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作,下面就具体看看编译器到底在背后帮我们做了哪些复杂的工作的. 二.同步代码存在的问题 对于同步的代码,大家肯定都不陌生,因为我们平常写的代码大部分都是同步的,然而同步代码却存在一个很严重的问题,例如我们向一个Web服务器发出一个

.net4.5的异步 async await 和Task

首先应该明白Task的概念-----任务 //这是一种优于Thread,甚至是ThreadPool的东西 而且是默认异步 再来理解async和await: 1.async只是配合await,用来声明异步方法的关键字: 2.async和await之间,await才是关键,直接含义——"异步等待",主线程运行至异步方法内的await处,一般情况下主线程会立即返回上层方法,而await处后续的任务(方法)会新开线程继续执行,新开线程在执行“等待”出任务(方法)结果后,会接着运行完异步方法内a

使用 Async 和 Await 的异步编程

来自:http://msdn.microsoft.com/library/vstudio/hh191443 异步对可能起阻止作用的活动(例如,应用程序访问 Web 时)至关重要. 对 Web 资源的访问有时很慢或会延迟. 如果此类活动在同步过程中受阻,则整个应用程序必须等待. 在异步过程中,应用程序可继续执行不依赖 Web 资源的其他工作,直至潜在阻止任务完成. 下表显示了异步编程提高响应能力的典型区域. 从 .NET Framework 4.5 和 Windows 运行时中列出的 API 包含

C#的多线程——使用async和await来完成异步编程(Asynchronous Programming with async and await)

https://msdn.microsoft.com/zh-cn/library/mt674882.aspx 侵删 更新于:2015年6月20日 欲获得最新的Visual Studio 2017 RC文档,参考Visual Studio 2017 RC Documentation. 使用异步编程,你可以避免性能瓶颈和提升总体相应效率.然而,传统的异步方法代码的编写方式比较复杂,导致它很难编写,调试和维护. Visual Studio 2012引入了一个简单的异步编程的方法,依赖.NET Fram

使用 Async 和 Await 的异步编程(C#)

本篇的内容大部分来自于同事的邮件描述,本想自己用言简意赅的用语言转述,无奈语言水平有限,且同事的介绍也是极尽详细和明了,故不再画蛇添足,直接引述.... 通过使用异步编程,你可以避免性能瓶颈并增强应用程序的总体响应能力.但是,编写异步应用程序的传统技术可能比较复杂,使它们难以编写.调试和维护. Visual Studio 2012 引入了一个简化的方法,异步编程,在 .NET Framework 4.5 和 Windows 运行时利用异步支持. 编译器可执行开发人员曾进行的高难度工作,且应用程序