返回目录

今天晚上没事写了个测试的代码,又看了看.net的并行编程,两个方法,一个是异步async修饰的,另一个是普通的方法,在控制台程序的Main方法里去调用这两个方法,会有什么结果呢?

首先我们看一下方法的组成,step1如下

 public async void Step1()
{
try
{
//await进行等待后,新线程的异常可以被主线程捕捉,这是正常的,下面的代码不会被执行
await Task.Run(() =>
{ Console.WriteLine("Step1 Current ThreadID" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep();
}); await Task.Run(() =>
{
Console.WriteLine("Step1 Current ThreadID" + Thread.CurrentThread.ManagedThreadId);
Console.WriteLine("ThreadTest.Test Runing");
});
}
catch (Exception ex)
{ Console.WriteLine("ThreadTest" + ex.Message);
}
}

step2如下

 public void Step2()
{
Console.WriteLine("Step2 Current ThreadID" + Thread.CurrentThread.ManagedThreadId);
}

我们可以看到step2很简单,不会有什么延时,就是在屏幕上输出一段话,而step1就显得复杂一些了,它是一个异步的方法,并且使用Task.Run开启了两个新线程,而第一

个线程的运行时间是3秒,很长呀,哈哈,第二个是在屏幕上输出一段话!现在我们把step1和step2写在一起会出现什么情况呢?

 var test = new ThreadTest();
test.Step1();//整个方法不阻塞,但方法内部有可能阻塞
test.Step2();

aaarticlea/png;base64,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" alt="" />

通过上面的图我们认识到了,step1按着顺序先执行,而由于第一个线程要执行3秒,这时step2被并行执行,3秒后,step1的第二个线程继续执行(由于使用了await,所以step1内部进行了等待,不会应响他外面的方法,也应响不了,呵呵!

怎么了,看了上面的例如,是不是对并行编程有了新的认识呢!

返回目录

C#~异步编程再续~async异步方法与同步方法的并行的更多相关文章

  1. 异步编程(Async和Await)的使用

    .net4.5新特性之异步编程(Async和Await)的使用 一.简介 首先来看看.net的发展中的各个阶段的特性:NET 与C# 的每个版本发布都是有一个“主题”.即:C#1.0托管代码→C#2. ...

  2. .Net 4.5 异步编程初试(async和await)

    .Net 4.5 异步编程初试(async和await) 前言 最近自己在研究Asp.Net Web API.在看到通过客户端来调用Web API的时候,看到了其中的异步编程,由于自己之前没有接触过, ...

  3. C#~异步编程再续~await与async引起的w3wp.exe崩溃

    返回目录 最近怪事又开始发生了,IIS的应用程序池无做挂掉,都指向同一个矛头,async,threadPool,Task,还有一个System.NullReferenceException,所以这些都 ...

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

    一.简介 首先来看看.net的发展中的各个阶段的特性:NET 与C# 的每个版本发布都是有一个"主题".即:C#1.0托管代码→C#2.0泛型→C#3.0LINQ→C#4.0动态语 ...

  5. .NET异步编程初识async与await

    这是两个关键字,用于异步编程.我们传统的异步编程方式一般是Thread.ThreadPool.BeginXXX.EndXXX等等.把调用.回调分开来,代码的逻辑是有跳跃的,于是会导致思路不是很清晰的问 ...

  6. 异步编程(async&await)

    前言 本来这篇文章上个月就该发布了,但是因为忙 QuarkDoc 一直没有时间整理,所以耽搁到今天,现在回归正轨. C# 5.0 虽然只引入了2个新关键词:async和await.然而它大大简化了异步 ...

  7. C# 异步编程(async&await)

    同步:同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去 异步:异步是指进程不需要一直等下去,而是继续执行下面的操作 ...

  8. 《C#并发编程经典实例》学习笔记—异步编程关键字 Async和Await

    C# 5.0 推出async和await,最早是.NET Framework 4.5引入,可以在Visual Studio 2012使用.在此之前的异步编程实现难度较高,async使异步编程的实现变得 ...

  9. C# 异步编程4 async与await 异步程序开发

    随着C#异步程序开发系列的深入,你会发现编写异步程序越发简单.事物的发展就是这样的规律,从简单到复杂再到简单. 在C# 5.0中我们可以通过async与await关键字实现快捷的异步程序开发,如下: ...

随机推荐

  1. 玩转JavaScript OOP[0]——基础类型

    前言 long long ago,大家普遍地认为JavaScript就是做一些网页特效的.处理一些事件的.我身边有一些老顽固的.NET程序员仍然停留在这种认知上,他们觉得没有后端开发肯定是构建不了系统 ...

  2. 轻量级ORM框架初探-Dapper与PetaPoco的基本使用

    一.EntityFramework EF是传统的ORM框架,也是一个比较重量级的ORM框架.这里仍然使用EF的原因在于为了突出轻量级ORM框架的性能,所谓有对比才有更优的选择. 1.1 准备一张数据库 ...

  3. NoSQL初探之人人都爱Redis:(1)Redis简介与简单安装

    一.NoSQL的风生水起 1.1 后Web2.0时代的发展要求 随着互联网Web2.0网站的兴起,传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类型的Web2.0纯动态网站已经 ...

  4. WebForms VS. MVC(翻译)

    (本文翻译自CodeProject上阿三写的一篇文章,原文地址:http://www.codeproject.com/Articles/528117/WebForms-vs-MVC,讲了有关ASP.A ...

  5. 从阿里巴巴IPO联想到创始人和资方关系

    [小九的学堂,致力于以平凡的语言描述不平凡的技术.如要转载,请注明来源:小九的学堂.cnblogs.com/xfuture] 5月7日,阿里巴巴于今日向美国证券交易委员会(SEC)提交了IPO(首次公 ...

  6. Emacs 配置文件

    以下是我整理的 emacs 配置文件,供刚开始玩 emacs 的同学参考.网上有人说:emacs 是神的编辑器,如果能够用到这样的编辑器,那这个人就是神了.从我个人的经验来看,emacs 是一把利器, ...

  7. 浅析MSIL中间语言——PE文件结构篇

    一.开篇 开篇我想讲一下于本文无关的话题,其实我很想美化一下自己博客园一直没时间弄,无意间找了博客园李宝亨的博客园里面有一篇分享自己主题的文章,我就将这个模板暂时用作我的blog主题,我要讲述一个关于 ...

  8. C语言 · 特殊回文数

    问题描述 123321是一个非常特殊的数,它从左边读和从右边读是一样的. 输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n . 输入格式 输入一行,包含一个正整数n. 输 ...

  9. [CORS:跨域资源共享] W3C的CORS Specification

    随着Web开放的程度越来越高,通过浏览器跨域获取资源的需求已经变得非常普遍.在我看来,如果Web API不能针对浏览器提供跨域资源共享的能力,它甚至就不应该被称为Web API.从另一方面来看,浏览器 ...

  10. Linux查找命令:grep,awk,sed

    grep grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具 ...