新进阶的程序员可能对async、await用得比较多,却对之前的异步了解甚少。本人就是此类,因此打算回顾学习下异步的进化史。
本文主要是回顾async异步模式之前的异步,下篇文章再来重点分析async异步模式。
APM 异步编程模型,Asynchronous Programming Model
早在C#1的时候就有了APM。虽然不是很熟悉,但是多少还是见过的。就是那些类是BeginXXX和EndXXX的方法,且BeginXXX返回值是IAsyncResult接口。
在正式写APM示例之前我们先给出一段同步代码:
//1、同步方法 private void button1_Click(object sender, EventArgs e) { Debug.WriteLine("【Debug】线程ID:" + Thread.CurrentThread.ManagedThreadId); var request = WebRequest.Create("https://github.com/");//为了更好的演示效果,我们使用网速比较慢的外网 request.GetResponse();//发送请求 Debug.WriteLine("【Debug】线程ID:" + Thread.CurrentThread.ManagedThreadId); label1.Text = "执行完毕!"; }
【说明】为了更好的演示异步效果,这里我们使用winform程序来做示例。(因为winform始终都需要UI线程渲染界面,如果被UI线程占用则会出现“假死”状态)
【效果图】