C#异步编程和await/async

关键字:APM(1.0)、EAP(2.0)、TAP(4.0)、async/await(4.5)

在.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) (在mvvm中非常有用 [CallerMemberName] string propertyName = null)

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值