返回目录

今天晚上没事写了个测试的代码,又看了看.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. Lesson 6 Percy Buttons

    Text I have just moved to a house in Bridge Street. Yesterday a bagger knocked at my door. He asked ...

  2. Python黑帽编程 3.3 MAC洪水攻击

    Python灰帽编程 3.3 MAC洪水 传统的交换机(我只对我目前使用的交互机做过测试,按照常识只能这样表述)在数据转发过程中依靠对CAM表的查询来确定正确的转发接口,一旦在查询过程中无法找到相关目 ...

  3. C#中使用Socket实现简单Web服务器

    上一篇博客中介绍了怎样使用socket访问web服务器.关键有两个: 熟悉Socket编程: 熟悉HTTP协议. 上一篇主要是通过socket来模拟浏览器向(任何)Web服务器发送(HTTP)请求,重 ...

  4. 仅此一文让你明白ASP.NET MVC 之Model的呈现(仅此一文系列三)

    本文目的 我们来看一个小例子,在一个ASP.NET MVC项目中创建一个控制器Home,只有一个Index: public class HomeController : Controller { pu ...

  5. 【Java并发编程实战】-----“J.U.C”:Semaphore

    信号量Semaphore是一个控制访问多个共享资源的计数器,它本质上是一个"共享锁". Java并发提供了两种加锁模式:共享锁和独占锁.前面LZ介绍的ReentrantLock就是 ...

  6. Atitit 教育与培训学校 的计划策划 v4 qc18

    Atitit 教育与培训学校 的计划策划 v4 qc18 1.1. 版本历史12. 教育历史的前世今生12.1. 自学vs 家庭学校vs 私立学校vs 公立学校模式 vs 企业内部学校 vs 其他商业 ...

  7. JS函数 -- 功能,语法,返回值,匿名函数,自调用匿名函数,全局变量与局部变量,arguments的使用

    “JavaScript设计得最出色的就是它的函数的实现.” -- <JavaScript语言精粹> 函数包含一组语句,它们是JS的基础模块单元,用于指定对象的行为.一般来说,所谓编程,就是 ...

  8. VMware 安装虚拟机安装MAC (OSX10_11)

    一.简述前言: 1.本案例是基于 VMware Workstation Pro(专业版)12 上创建一个MAC操作系统(版本 :OSX10_11),下面的步骤基本上和安装其他类型的虚拟机没有什么区别. ...

  9. PHP从PHP5.0到PHP7.1的性能全评测

    本文是最初是来自国外的这篇:PHP Performance Evolution 2016, 感谢高可用架构公众号翻译成了中文版, 此处是转载的高可用架构翻译后的文章从PHP 5到PHP 7性能全评测( ...

  10. SQL Server Audit监控触发器状态

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 注意事项(Attention) 疑问(Questions) 参 ...