C#异步学习一

运行以下代码:

static void Main(string[] args)
{
    Task t = TaskTest();
}

private static async Task TaskTest()
{
    await DoWork();
    Console.WriteLine("TaskTest");
}

private static async Task DoWork()
{
    Console.WriteLine("Hello World!");
    for (int i = 0; i < 3; i++)
    {
        await Task.Delay(1000);
        Console.WriteLine("Working...{0}", i);
    }
}

运行结果如下:

结论:

1.异步方法被标记async

2.被标记async的方法必须使用await关键字,重点是await

  当方法运行时遇到某个await关键字,编译器会开辟一个独立的线程,将其后的运行代码会放入该线程中运行。

3.代码执行分析

static void Main(string[] args)
{
    //程序入口
    Task t = TaskTest();//进入TaskTest()
}

private static async Task TaskTest()
{
    await DoWork();//遇到await,执行DoWork(),开辟一个新线程执行之后的Console.WriteLine("TaskTest");代码
    Console.WriteLine("TaskTest");
}

private static async Task DoWork()
{
    Console.WriteLine("Hello World!");//在控制台输出“Hello Wrold!”
    for (int i = 0; i < 3; i++)
    {
        await Task.Delay(1000);//遇到await,执行Task.Delay(1000),开辟一个新线程执行之后的代码
        Console.WriteLine("Working...{0}", i);
    }
}

依据以上的代码执行分析,控制台最终只会打印出“Hello World!”。

时间: 2024-12-28 12:14:14

C#异步学习一的相关文章

AJAX异步学习总结(1)

AJAX异步学习总结(1) AJAX异步学习总结(1) ①:运用HTML和CSS来实现页面,表达信息: ②:运用XMLHttpRequest和服务器进行数据的异步交换: ③:运用JavaScript操作DOM,实现动态局部刷新: HTTP请求 HTTP是一个无状态的链接 一个完整的HTTP请求过程,7个步骤 建立TCP连接: WEB浏览器向WEB服务器发送请求命令: Web浏览器发送请求头信息: Web服务器应答: Web服务器发送应答头信息: Web服务器向浏览器发送数据: Web服务器关闭T

线程异步学习(基于java学习笔记)

一 基本概念的理解 1.1线程中断方法 --interrupt() 当调用一个线程的interrupt方法时候,线程并没有真的被中断,只是对其状态改变,线程会有一个boolean变量isInterrputed.有wait sleep方法会阻塞线程. wait 和sleep方法都会使得线程挂起,阻塞.区别是wait会释放资源,而sleep方法并不会释放资源.一旦执行wait方法后,线程立即被挂起,直到有其他线程调用资源的notify方法.具体参见博客,多线程资源争用问题: http://blog.

异步学习

多线程和异步的学习中发现,多任务处理发挥资源最大利用率时可以使用,还有就是在界面长期等待时可以使用,这样用户使用更加方便,软件更加专业. 在做软件不可滥用异步,因为常常发现有 一般的方法比异步更有效. 下面就以一个小例子介绍一下怎么使用异步 例子:WPF窗口中有一个按钮,点击按钮进行计算,在计算过程中显示进度,计算完成后显示结果,如果中间想取消计算,可以用另一个按钮点击来取消操作. 取消操作主要是用CancellationTokenSource对象, private CancellationTo

C#中的异步学习

C#中的异步 C#5.0版本发布有一个"主题那就是异步编程. 我们先创建一个windowForm窗体,实现下面效果,然后我们通过简单的案例对比同步和异步: 首先我们编写一个耗时方法: 1 /// <summary> 2 /// 耗时方法 3 /// </summary> 4 /// <param name="name"></param> 5 private void DoSomething(string name) 6 { 7

Tornado学习之异步原理

本文和大家分享的主要是Tornado 异步原理相关内容,一起来看看吧,希望对大家学习Tornado有所帮助. Tornado是什么? Tornado是一个用Python编写的异步HTTP服务器,同时也是一个web开发框架. Tornado 优秀的大并发处理能力得益于它的 web server 从底层开始就自己实现了一整套基于 epoll 的单线程异步架构. 同步.异步编程差异 .对于同步阻塞型Web服务器,我们来打个比方,将它比作一间饭馆,而Web请求就是来这家饭馆里吃饭的客人.假设饭馆店里只有

学习JavaScript中的异步Generator

本文和大家分享的主要是javascript中异步Generator相关内容,一起来看看吧,希望对大家学习javascript 有所帮助. 异步的generators和异步iteration已经到来 ! 这是错误的, 它们现在还在 阶段 3 ,这表示他们很有可能在JavaScript未来的一个版本中发布. 在他们发布之前,你可以通过 Babel 来在你的项目中使用还在阶段3的建议内容. 网站基本上还是一些分散运行的应用,因为任何在语言上的修改都会造成永久的影响,所以所有的未来的版本都需要向后兼容.

nginx学习(二)——基础概念之异步非阻塞

上面讲了很多关于nginx的进程模型,接下来,我们来看看nginx是如何处理事件的. 有人可能要问了,nginx采用多worker的方式来处理请求,每个worker里面只有一个主线程,那能够处理的并发数很有限啊,多少个worker就能处理多少个并发,何来高并发呢?非也,这就是nginx的高明之处,nginx采用了异步非阻塞的方式来处理请求,也就是说,nginx是可以同时处理成千上万个请求的.想想apache的常用工作方式(apache也有异步非阻塞版本,但因其与自带某些模块冲突,所以不常用),每

ArcGIS API for JavaScript 4.2学习笔记[7] 鹰眼(缩略图的实现及异步处理、Promise、回调函数、监听的笔记)

文前说明:关于style就是页面的css暂时不做评论,因为官方给的例子的样式实在太简单了,照抄阅读即可. 这篇文章有着大量AJS 4.x版本添加的内容,如监听watch.Promise对象.回调函数.异步处理等内容,原理性的东西我会在文末解释,各位看官不用担心看不懂,我尽量用通俗的语言解释这些. 惯例,如果不习惯从头看到尾,可以直接跳到后面看总结. 大家应该看过商业地图的缩略图功能吧?以度娘地图为例,在使用街景地图的时候,左下角会出现一个地点一样的2D小地图: 这个就是鹰眼功能的应用,在很多桌面

[学习总结]6、Android异步消息处理机制完全解析,带你从源码的角度彻底理解

开始进入正题,我们都知道,Android UI是线程不安全的,如果在子线程中尝试进行UI操作,程序就有可能会崩溃.相信大家在日常的工作当中都会经常遇到这个问题,解决的方案应该也是早已烂熟于心,即创建一个Message对象,然后借助Handler发送出去,之后在Handler的handleMessage()方法中获得刚才发送的Message对象,然后在这里进行UI操作就不会再出现崩溃了. 这种处理方式被称为异步消息处理线程,虽然我相信大家都会用,可是你知道它背后的原理是什么样的吗?今天我们就来一起