原地址:http://www.cnblogs.com/Opiece/p/4803836.html
客户端
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public static string strContent = "";//用于存储时间信息 private void button1_Click(object sender, EventArgs e) { //在实际的开发中,当不需要对线程进行操作的话,不要手动去创建线程,尽量的使用线程池技术去创建开启一个线程, //可以提高线程的使用效率,使用线程池技术也可以提高应用程序的效率。 strContent += $"开始时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} "; Task.Factory.StartNew(() => { loadData("Handler1.ashx"); strContent += $"线程1完成时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} "; }); Task.Factory.StartNew(() => { loadData("Handler2.ashx"); strContent += $"线程2完成时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} "; }); //使用工厂创建一个工作任务项,并执行了 //Task t1 = Task.Factory.StartNew(() => { // //执行代码 // Thread.Sleep(2000); // MessageBox.Show("当前的线程是:" + Thread.CurrentThread.ManagedThreadId); //}); //Task t1 = new Task(() => // { // Thread.Sleep(2000); // MessageBox.Show("当前的线程是:" + Thread.CurrentThread.ManagedThreadId); // }); //t1.Start(); //MessageBox.Show(response); } private void button2_Click(object sender, EventArgs e) { MessageBox.Show($"消息:{strContent}"); } /// <summary> /// 模拟下载资源 /// 不同Handler请求完成的时间不一样 /// Handler1.ashx 需要5秒 /// Handler2.ashx 需要10秒 /// </summary> /// <param name="HandlerName"></param> public void loadData(string HandlerName) { WebClient wc = new WebClient(); string strUrlPara = "{"action":"mobileLogin","did":147,"param":{"uid":"全角色syf","loginType":2,"pwd":""},"sid":"358240051111110","timestamp":null,"token":null}"; strUrlPara = HttpUtility.UrlEncode(strUrlPara); byte[] data = new ASCIIEncoding().GetBytes(strUrlPara); byte[] responseArray = wc.UploadData($"http://localhost:37443/{HandlerName}", data); var response = Encoding.UTF8.GetString(responseArray); }
服务端
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class Handler1 : IHttpHandler { public void ProcessRequest(HttpContext context) { System.Threading.Thread.Sleep(5 * 1000); context.Response.ContentType = "text/plain"; context.Response.Write("Hello World"); } public bool IsReusable { get { return false; } } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class Handler2 : IHttpHandler { public void ProcessRequest(HttpContext context) { System.Threading.Thread.Sleep(10 * 1000); context.Response.ContentType = "text/plain"; context.Response.Write("Hello World"); } public bool IsReusable { get { return false; } } }