C#~异步编程再续~async异步方法与同步方法的并行
今天晚上没事写了个测试的代码,又看了看.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异步方法与同步方法的并行的更多相关文章
- 异步编程(Async和Await)的使用
.net4.5新特性之异步编程(Async和Await)的使用 一.简介 首先来看看.net的发展中的各个阶段的特性:NET 与C# 的每个版本发布都是有一个“主题”.即:C#1.0托管代码→C#2. ...
- .Net 4.5 异步编程初试(async和await)
.Net 4.5 异步编程初试(async和await) 前言 最近自己在研究Asp.Net Web API.在看到通过客户端来调用Web API的时候,看到了其中的异步编程,由于自己之前没有接触过, ...
- C#~异步编程再续~await与async引起的w3wp.exe崩溃
返回目录 最近怪事又开始发生了,IIS的应用程序池无做挂掉,都指向同一个矛头,async,threadPool,Task,还有一个System.NullReferenceException,所以这些都 ...
- .NET4.5新特性之异步编程(Async和Await)的使用
一.简介 首先来看看.net的发展中的各个阶段的特性:NET 与C# 的每个版本发布都是有一个"主题".即:C#1.0托管代码→C#2.0泛型→C#3.0LINQ→C#4.0动态语 ...
- .NET异步编程初识async与await
这是两个关键字,用于异步编程.我们传统的异步编程方式一般是Thread.ThreadPool.BeginXXX.EndXXX等等.把调用.回调分开来,代码的逻辑是有跳跃的,于是会导致思路不是很清晰的问 ...
- 异步编程(async&await)
前言 本来这篇文章上个月就该发布了,但是因为忙 QuarkDoc 一直没有时间整理,所以耽搁到今天,现在回归正轨. C# 5.0 虽然只引入了2个新关键词:async和await.然而它大大简化了异步 ...
- C# 异步编程(async&await)
同步:同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去 异步:异步是指进程不需要一直等下去,而是继续执行下面的操作 ...
- 《C#并发编程经典实例》学习笔记—异步编程关键字 Async和Await
C# 5.0 推出async和await,最早是.NET Framework 4.5引入,可以在Visual Studio 2012使用.在此之前的异步编程实现难度较高,async使异步编程的实现变得 ...
- C# 异步编程4 async与await 异步程序开发
随着C#异步程序开发系列的深入,你会发现编写异步程序越发简单.事物的发展就是这样的规律,从简单到复杂再到简单. 在C# 5.0中我们可以通过async与await关键字实现快捷的异步程序开发,如下: ...
随机推荐
- mina框架详解
转:http://blog.csdn.net/w13770269691/article/details/8614584 mina框架详解 分类: web2013-02-26 17:13 12651人 ...
- 由乱序播放说开了去-数组的打乱算法Fisher–Yates Shuffle
之前用HTML5的Audio API写了个音乐频谱效果,再之后又加了个播放列表就成了个简单的播放器,其中弄了个功能是'Shuffle'也就是一般播放器都有的列表打乱功能,或者理解为随机播放. 但我觉得 ...
- ASP.NET MVC 5 - 创建连接字符串(Connection String)并使用SQL Server LocalDB
您创建的MovieDBContext类负责处理连接到数据库,并将Movie对象映射到数据库记录的任务中.你可能会问一个问题,如何指定它将连接到数据库? 实际上,确实没有指定要使用的数据库,Entity ...
- [ASP.NET MVC 小牛之路]05 - 使用 Ninject
在[ASP.NET MVC 小牛之路]系列上一篇文章(依赖注入(DI)和Ninject)的末尾提到了在ASP.NET MVC中使用Ninject要做的两件事情,续这篇文章之后,本文将用一个实际的示例来 ...
- EF:打开Oracle连接时报错
基础提供程序在 Open 上失败. The underlying provider failed on Open. 解决:安装最新的ODTwithODAC121024.
- SSIS Destination 组件使用Fast-Load mode出错
查看一个Package的历史Message 数据,发现 DataFlow Task 经常出错,错误信息的Description是: Description: "While reading c ...
- javascript运动系列第九篇——碰撞运动
× 目录 [1]碰撞检测 [2]无损碰撞 [3]有损碰撞 前面的话 碰撞可以分为碰壁和互碰两种形式,上篇介绍了碰壁运动,本文将从浅入深地介绍碰撞运动的互碰形式 碰撞检测 对于互碰形式的碰撞运动来说,首 ...
- js self = this的解释
Demo 1: function Person(){ this.name = 'hjzgg'; this.age = 24; this.show = function(){ alert(name + ...
- jQuery之on
在jQuery1.9版本中,已经去掉了live和delegate方法,从而将on方法的地位进一步提升. jQuery如此推崇on方法,必有其牛逼的地方.那么我们就有必要了解这个on,并在代码中利用它, ...
- 关于SubSonic3.0未处理InvalidOperationException异常(关键字TOP附近有语法错误)的处理
早上在测试程序时,使用了Top这个属性,没想到马上抛出了个“未处理InvalidOperationException异常(关键字'TOP'附近有语法错误)”这个错误提示,见下图: 然后Debug一下, ...