C# 5.0 aynsc 和 await ,Trace改进
2016-03-08 18:20
681 查看
C# 5.0出来已经很久了,之前做项目一直用C#4.0的方法,一直没时间尝鲜,最近半年多没弄C#, 准备捡一捡,给自己练练级。
C# 5.0新出的关键字 aynsc 和
await 一般成对使用,直接上代码
(如果你还是.net Framework4.0的架构不想升级到4.5,没关系Microsoft.Bcl.Async将帮助你在不升级到4.5的Framework的情况下依然可以用 aynsc 和 await, 下载)
输出结果:
123
主线程消息
Value is : 4
结论:async 代表这个函数里面有异步,但是里面的异步是从 await 这个函数开始,之前的行还是同步状态所以先输出“123”,但是GetValueAsync是异步函数新开了线程,走到这里主线程认为TestAsync产生了异步,所以直接接着走,输出“主线程消息”,但是TestAsync里面由于await ,所以必须等待GetValueAsync线程结束,就可以输出“Value
is : 4”。
另外C#5.0 Trace .Net 4.5中引入了三个Attribute:CallerMemberName、CallerFilePath和CallerLineNumber
1.区别:
//输出跟踪信息
Trace.WriteLine()
将有关跟踪的信息写入 Listeners 集合中的跟踪侦听器
在调试和release模式都输出!默认是写到输出窗口的,也可以指定写到指定文件,或系统日志中!
//输出调试信息
Debug.WriteLine()
将有关调试的信息写入Listeners集合中的跟踪侦听器 。
只有调试的时候才输出。
C# 5.0新出的关键字 aynsc 和
await 一般成对使用,直接上代码
(如果你还是.net Framework4.0的架构不想升级到4.5,没关系Microsoft.Bcl.Async将帮助你在不升级到4.5的Framework的情况下依然可以用 aynsc 和 await, 下载)
static void Main(string[] args) { TestAsync(); Console.WriteLine("主线程消息"); TraceMessage("abc"); while (true) { } } static Task<double> GetValueAsync(double num1, double num2) { return Task.Run(() => { return num1 + num2; }); } public static async void TestAsync() { Console.WriteLine("123"); Thread.Sleep(1000); double result =await GetValueAsync(1,3); Console.WriteLine("Value is : " + result); }
输出结果:
123
主线程消息
Value is : 4
结论:async 代表这个函数里面有异步,但是里面的异步是从 await 这个函数开始,之前的行还是同步状态所以先输出“123”,但是GetValueAsync是异步函数新开了线程,走到这里主线程认为TestAsync产生了异步,所以直接接着走,输出“主线程消息”,但是TestAsync里面由于await ,所以必须等待GetValueAsync线程结束,就可以输出“Value
is : 4”。
另外C#5.0 Trace .Net 4.5中引入了三个Attribute:CallerMemberName、CallerFilePath和CallerLineNumber
1.区别:
//输出跟踪信息
Trace.WriteLine()
将有关跟踪的信息写入 Listeners 集合中的跟踪侦听器
在调试和release模式都输出!默认是写到输出窗口的,也可以指定写到指定文件,或系统日志中!
//输出调试信息
Debug.WriteLine()
将有关调试的信息写入Listeners集合中的跟踪侦听器 。
只有调试的时候才输出。
public void TraceMessage(string message, [CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0) { Trace.WriteLine("message: " + message); Trace.WriteLine("member name: " + memberName); Trace.WriteLine("source file path: " + sourceFilePath); Trace.WriteLine("source line number: " + sourceLineNumber); }
相关文章推荐