关于异步编程的简单理解:
在.NET4.5中新增了异步编程的新特性async和await,使得异步编程更为简单。经过特性能够将这项复杂的工做交给编译器来完成了。以前传统的方式来实现异步编程较为复杂,这样对于程序猿来讲处理起来比较困难,调试也没那么方便,后续的维护工做也比较痛苦。编程
Async和Await关键字是C#异步编程的核心。经过使用这两个关键字,你可使用.NET Framework 或 Windows Runtime的资源建立一个异步方法如同建立一个同步方法同样容易。异步
接下来经过VS2013 建立一个基于.NET4.5的控制台应用程序进行尝试。async
先直接把简单的代码贴出来,以下所示异步编程
/// <summary>
/// 异步方法打印Hello World
/// </summary>
public async static void AsyncPrintHelloWorld()
{
Console.WriteLine("异步方法调用开始");
Console.WriteLine("异步方法:Hello World");
await Task.Delay(1000);
Console.WriteLine("退出异步方法");
}学习
上面注释中也有进行说明,第一个是同步方法,第二个是异步方法。同步方法能够经过Thread.Sleep(1000);暂停方法执行1000ms,一样的异步方法能够经过await Task.Delay(1000)来处理,并且在异步方法的声明中要加入async的关键字。spa
接下来是简单的调用调试
Console.WriteLine("======异步方法调用=====");
AsyncPrintHelloWorld();
Console.WriteLine("异步方法调用结束");
Console.ReadLine();
}code
F5执行后结果以下资源
经过执行结果能够很明显的看出,调用的同步方法里面是顺序执行的,而在异步方法中不同,当经过Task.Delay(1000)暂停当前方法的时候,其方法外面的下面的方法会继续执行,也就是打印“异步方法调用结束”的语句。字符串
能够发现使用了关键字以后,同步与异步的语法差异很小。随着.NET4.5的推出,许多类库和已有类库都将支持这种新型的异步语法,好比我正在学习的HTTPClient等等。
上面的演示只是经过简单的void的方法进行演示的,固然确定能够带上返回值的额。
namespace Async
{
class Program
{
static void Main(string[] args)
{
var ret = AsyncAdd("累死了,真想不出啥好的例子来调用");
Console.WriteLine(ret.Result);
Console.ReadLine();
}
///异步打印传入的字符串
public async static Task<string> AsyncAdd(string str)
{
string result = await PringString(str);
return result;
}
public async static Task<string> PringString(string str)
{
return "Hello World" + str;
}
}
}
经过运行其实和同步的是同样的,只不过看看如何来定义异步方法的返回值,根据Task<T>来进行定义。
若是指定Task<TResult>为返回结果,那么这个方法必须包含return指定的TResult结果的语句。
一个async方法里一般包含一个或多个的对应的await操做符,但若是没有await表达式也不会致使编译错误。但若是调用一个async方 法,却不使用await关键字来标记一个挂起点的话,程序将会忽略async关键字并以同步的方式执行
总结
1.一个异步方法的声明中必然包含一个async的修饰符。
2.异步方法的方法名能够以“Async”结尾。
3.Task<TResult> 当你的方法有返回值时,那么TResult即返回值的类型
4.方法一般至少包含一个await表达式。