关键字: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)
|