await与async的简单了解
异步方法的返回类型可以为Task、Task、void。方法不能声明ref或out参数。
无法捕捉返回类型为void的异步方法引发的异常,如果返回Task或Task的异步方法中出现异常,则在任务等待时将此异常存储在返回的任务中并再次引发
await运算符将一个异步方法挂起,直到任务完成。await表达式不阻止正在其上运行的线程,相反,它导致编译器将剩下的异步方法注册为等待的任务上的延续(即在异步方法返回结果后,在执行挂起点剩下的操作)。返回至异步方法的调用方。
Task.WhenAll方法应用于任务集合,WhenAll的应用程序会返回直至集合中每个任务完成时才完成的单个任务
Task.WhenAny 用于返回集合中的任意任务完成后完成的任务
await不能等待无返回的异步方法(即异步方法返回值不能为void)
使用CancellationTokenSource对象可以进行异步任务的取消、在一段时间后取消、完成一个异步任务后取消剩余任务等操作。
Task启动的线程是后台线程,不过可以通过Wait方法使应用程序等待task执行完成。Task与Thread的一个重要区别是:Task底层是使用线程池,而Thread每次实例化都会创建一个新的线程。通过如下测试:
	namespace AsyncDelegateDemo
	{
	    class Program
	    {
	        static void DoRun1()
	        {
	            Console.WriteLine("Thread调用的Thread Id =" + Thread.CurrentThread.ManagedThreadId);
	        }
	        static void DoRun2()
	        {
	            Thread.Sleep(50);
	            Console.WriteLine("Task调用Thread Id =" + Thread.CurrentThread.ManagedThreadId);
	        }
	        static void Main(string[] args)
	        {
	            for (int i = 0; i < 50; i++)
	            {
	                new Thread(DoRun1).Start();
	            }
	            for (int i = 0; i < 50; i++)
	            {
	                Task.Run(() => { DoRun2(); });
	            }
	            Console.ReadLine();
	        }
	    }
	}												
											await与async的简单了解的更多相关文章
- C#中的异步编程--探索await与async关键字的奥妙之处,原来理解和使用异步编程可以这么简单
		
前言 await与async是C#5.0推出的新语法,关于await与async有很多文章讲解.但看完后有没有这样一种感觉,感觉这东西像是不错,但好像就是看不太懂,也不清楚该怎么使用.虽然偶有接触,但 ...
 - await和async更多的理解
		
最近有不少网友提起await和async,呵呵,C# 5引进的语法糖. 这个语法糖还真不好吃,能绕倒一堆初学的朋友,在网上也有很多网友关于这块知识点的争论,有对有错,今天在这里把这个误区好好讲讲. 在 ...
 - C#语法——await与async的正确打开方式
		
C#5.0推出了新语法,await与async,但相信大家还是很少使用它们.关于await与async有很多文章讲解,但有没有这样一种感觉,你看完后,总感觉这东西很不错,但用的时候,总是想不起来,或者 ...
 - C#语法——泛型的多种应用  C#语法——await与async的正确打开方式  C#线程安全使用(五)  C#语法——元组类型  好好耕耘 redis和memcached的区别
		
C#语法——泛型的多种应用 本篇文章主要介绍泛型的应用. 泛型是.NET Framework 2.0 版类库就已经提供的语法,主要用于提高代码的可重用性.类型安全性和效率. 泛型的定义 下面定义了 ...
 - await和async在一般处理程序中的使用
		
写在前面 有个小项目,前端使用的html页面,那服务端的业务处理就采用最简单的一般处理程序了,之前一直在用,觉得一直用一种方式,确实挺蛋疼的,之前也有了解过async和await的内容.就想着自己折腾 ...
 - generator 到 async 的简单理解。
		
generator 到 async 的简单理解.觉得实现方式很有意思. 1. generator generator 函数返回一个遍历器对象 遍历器对象 每次调用next 方法 返回 有着value ...
 - 图解 Await 和 Async
		
原文链接:Await and Async Explained with Diagrams and Examples 文章目录 简介 Promise 问题:组合 Promise Async 函数 Awa ...
 - 小心C# 5.0 中的await and async模式造成的死锁
		
平时在使用C# 5.0中的await and async关键字的时候总是没注意,直到今天在调试一个ASP.NET项目时,发现在调用一个声明为async的方法后,程序老是莫名其妙的被卡住,就算声明为as ...
 - await和async关键字来写异步程序
		
await和async关键字出现于.Net5.0,方便写异步程序. 例子: public class MyClass { public MyClass() { DisplayValue(); //这里 ...
 
随机推荐
- JS正则验证格式
			
function test() { var temp = document.getElementById("text1"); //对电子邮件的验证 var myreg = /^([ ...
 - Spring MVC  之 Hello World
			
1.新建一个动态web项目 2.web.xml编写 <?xml version="1.0" encoding="UTF-8"?> <web-a ...
 - Android 虚拟机快捷键
			
何须这样麻烦,直接用快捷键就行了,你用鼠标点来点去怎么还不如用快捷键来得快:一下是快捷键: Home键(小房子键) 在键盘上映射的就是home键,这倒是很好记. Menu键 用于打开菜单的按键,在键盘 ...
 - hook技术分类
			
1.HOOK SERVICE TABLE:HOOK SSDT 这种方法对于拦截 NATIVE API 来说用的比较多. SSDT hook,一句话——Windows把需要调用的内核API地址全都存在了 ...
 - 实现html元素跟随touchmove事件的event.touches[0].clientX移动
			
主要是使用了transform:translateX 实现 <!DOCTYPE html> <html lang="en"> <head> &l ...
 - [linux]磁盘挂载
			
最近磁盘空间不足了, 所以需要将更多的磁盘空间加进来. 因为目前占空间最多的就是home, 无论是下载还是本地用户的东西都是放在这里的. 将分区格式化为ext4, 然后使用blkid /dev/sda ...
 - Activiti工作流学习-----基于5.19.0版本(1)
			
该版本的Activiti运行须知: 1.JDK 6+,Eclipse最好是Kepler以上版本. 2.试验功能都有EXPERIMENTAL标注,被标注的部分不应该视为稳定的. 有兴趣的同学可以去了解下 ...
 - Lintcode--002(两个字符串是变位词)
			
写出一个函数 anagram(s, t) 判断两个字符串是否可以通过改变字母的顺序变成一样的字符串. 您在真实的面试中是否遇到过这个题? 样例 给出 s = "abcd", ...
 - 怎样制作百度recovery【转】
			
由于recovery的硬件相关性比较强,使得recovery的通用性不强,项目组为了降低整个开发的难度,coron项目里面默认是编译生成百度recovery的. 不过还是有很多开发者问私下我,怎样制作 ...
 - FB是磁珠的符号
			
本文来自:http://www.coofish.org/post/FB-cizhu.html今天实验室一哥们研究DSP电路图,发现图中有一个符号是FB,外形有点像电阻(R),但是不清楚是什么电子元器件 ...