这个是.NET 4.5的特性,因此要求最低.NET版本为4.5。程序员
看不少朋友仍是使用的Thread来使用异步多线程操做,基本上看不见有使用Async、Await进行异步编程的。各有所爱吧,其实均可以。只要正确使用就行,不过仍是写了这篇文章推荐你们使用Async、Await。 缘由就是:能够跟写同步方法同样去异步编程。代码则就很是的清晰,就跟写普通的代码同样,不用关系如何去异步编程,也让不少初级程序员也可以异步编程了。下面是一个使用Thread 多线程实现的异步例子,以及一个使用Async与Await的异步例子,接下来咱们再简单理解下Async与Await的相关技术说明。编程
Thread多线程异步编程例子
- class Program
- {
- static void Main(string[] args)
- {
- Console.WriteLine("主线程测试开始..");
- Thread th = new Thread(ThMethod);
- th.Start();
- Thread.Sleep(1000);
- Console.WriteLine("主线程测试结束..");
- Console.ReadLine();
- }
-
-
- static void ThMethod()
- {
- Console.WriteLine("异步执行开始");
- for (int i = 0; i < 5; i++)
- {
- Console.WriteLine("异步执行" + i.ToString() + "..");
- Thread.Sleep(1000);
- }
- Console.WriteLine("异步执行完成");
- }
- }
以上代码运行效果以下图多线程

使用Async与Await进行异步编程
- class Program
- {
- static void Main(string[] args)
- {
- Console.WriteLine("主线程测试开始..");
- AsyncMethod();
- Thread.Sleep(1000);
- Console.WriteLine("主线程测试结束..");
- Console.ReadLine();
- }
-
- static async void AsyncMethod()
- {
- Console.WriteLine("开始异步代码");
- var result = await MyMethod();
- Console.WriteLine("异步代码执行完毕");
- }
-
- static async Task<int> MyMethod()
- {
- for (int i = 0; i < 5; i++)
- {
- Console.WriteLine("异步执行" + i.ToString() + "..");
- await Task.Delay(1000); //模拟耗时操做
- }
- return 0;
- }
- }
运行效果:异步

显而易见咱们就跟写同步方法同样,完成了异步方法的编写,代码更清晰了。async
只有拥有async才能在其内部使用await关键字。异步方法能够具备Task、Task<>或void的返回类型;异步编程
await关键字则是用于返回值是“可等待”类型(awaitable)的方法测试