C#异步编程和await/async

来源:互联网 发布:医疗软件 安全认证 编辑:程序博客网 时间:2024/05/16 13:59

在.NET 1.0开始微软就对异步编程做了相应的支持——即异步编程模型(APM), 之后在.NET 2.0中又提出了基于事件的异步编程模型(EAP),.NET 4.0中又提出了基于任务的异步编程模型(TAP),在.NET 4.5(对应于C#5.0)中提供了async和await两个关键字。

以下代码提供了三个.net版本的异步编程参考

        void Test()        {            int i = 0;            while (i < 100)            {                this.lbl.Dispatcher.Invoke(new Action(() => this.lbl.Content = i.ToString()));                Thread.Sleep(10);                i++;            }        }        /// <summary>        /// .net framework 1.0版本支持的异步编程,IsBackground关键字及线程池        /// </summary>        void Async_Net_v1()        {            new Thread(Test) { IsBackground = false }.Start();      //.Net 在1.0的时候,就已经提供最基本的API.            ThreadPool.QueueUserWorkItem(o => Test());              //线程池中取空闲线程执行委托(方法)        }        /// <summary>        /// .net framework 4.0版本提供了task        /// </summary>        void Async_Net_v4()        {            Task.Run((Action)Test);                                 //.Net 4.0以上可用        }        /// <summary>        /// .net frameword 4.5引入await和async关键字        /// </summary>        async void Async_Net_v45()        {            await Task.Run(new Action(Test));        }        private void btn_Click(object sender, RoutedEventArgs e)        {            Async_Net_v1();        }        private void btnV4_Click(object sender, RoutedEventArgs e)        {            Async_Net_v4();        }        private void btnv45_Click(object sender, RoutedEventArgs e)        {            Async_Net_v45();        }

C# 版本和.NET 版本对应关系:

C# 版本

.NET Framework版本

Visual Studio版本

发布日期

特性

C# 1.0

.NET Framework 1.0

Visual Studio .NET 2002

2002.1

委托

事件

APM

C# 1.1

.NET Framework 1.1

Visual Studio .NET 2003

2003.4

C# 2.0

.NET Framework 2.0

Visual Studio 2005(开始命名为Visual Studio)

2005.11

泛型

匿名方法

迭代器

可空类型

 

C# 3.0

.NET Framework 3.0

.NET Framework 3.5

Visual Studio 2008

2007.11

隐式类型的部变量

对象集合初始化

自动实现属性

匿名类型

扩展方法

查询表达式

Lambda表达式

表达式树

分部类和方法

Linq

C# 4.0

.NET Framework 4.0

Visual Studio 2010

2010.4

动态绑定

命名和可选参数

泛型的协变和逆变

互操作性

C# 5.0

.NET Framework 4.5

Visual Studio 2012

2012.8

异步和等待(async和await)

调用方信息(Caller Information)

 

原创粉丝点击