返回目录

今天晚上没事写了个测试的代码,又看了看.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. ABP理论学习之模块系统

    返回总目录 本篇目录 模块介绍 生命周期事件 模块依赖 自定义模块方法 模块介绍 ABP提供了构建模块并将这些模块组合起来创建应用的基础设施.一个模块可以依赖另一个模块.一般来说,一个程序集可以认为是 ...

  2. UITableView(一)

    #import <UIKit/UIKit.h> @interface ViewController : UIViewController<UITableViewDataSource, ...

  3. 剑指Offer面试题:12.在O(1)时间删除链表结点

    一.题目:在O(1)时间删除链表结点 题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点. 原文采用的是C/C++,这里采用C#,节点定义如下: public class ...

  4. .NET中提升UAC权限的方法总结

    [题外话] 从Vista开始,由于增加了UAC(用户账户控制,User Account Control)功能,使得管理员用户平时不再拥有能控制所有功能的管理员权限了,所以在调用很多比较重要的功能时需要 ...

  5. 用java开发微信公众号:测试公众号与本地测试环境搭建(一)

    本文为原创,原始地址为:http://www.cnblogs.com/fengzheng/p/5023678.html 俗话说,工欲善其事,必先利其器.要做微信公众号开发,两样东西不可少,那就是要有一 ...

  6. WCF Security基本概念(转载)

    WCF Security 主要包括 "Transfer Security"."Access Control"."Auditing" 几个部分 ...

  7. Web Modify The Html Elements According Url Parameters With Jquery

    需求说明 根据URL的参数, 来批量的对某些HTML元素做统一的修改. 解决思路 首先, 想办法获得这个URL的参数, 然后遍历对应的HTML元素, 做出对应的修改. 即可. 代码实现 <!DO ...

  8. WaitType:CXPACKET

    CXPACKET 等待类型是SQL Server 并发执行一个query时产生的.在run一个big query时,SQL Server充分利用系统的所有资源(CPU,Memory,IO),在最短时间 ...

  9. ios语音输入崩溃

    游戏中任何可以输入的地方,只要调用语音输入,必然会导致app崩溃,解决方法如下: ok, so essentially the gist of it is that siri wants gl con ...

  10. CoreData和SQLite多线程访问时的线程安全

    关于CoreData和SQLite多线程访问时的线程安全问题 数据库读取操作一般都是多线程访问的.在对数据进行读取时,我们要保证其当前状态不能被修改,即读取时加锁,否则就会出现数据错误混乱.IOS中常 ...