C# 5.0 aynsc 和 await ,Trace改进

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);
    }








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章