1. 程式人生 > >C#非同步程式設計和await/async

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

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)