您的位置:首页 > 编程语言 > C#

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, 下载)

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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: