接口 C# 请求数据 模拟多线程下载文件
原地址:http://www.cnblogs.com/Opiece/p/4803836.html
客户端
public static string strContent = "";//用于存储时间信息 private void button1_Click(object sender, EventArgs e) { //在实际的开发中,当不需要对线程进行操作的话,不要手动去创建线程,尽量的使用线程池技术去创建开启一个线程, //可以提高线程的使用效率,使用线程池技术也可以提高应用程序的效率。 strContent += $"开始时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}\r\n"; Task.Factory.StartNew(() => { loadData("Handler1.ashx"); strContent += $"线程1完成时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}\r\n"; }); Task.Factory.StartNew(() => { loadData("Handler2.ashx"); strContent += $"线程2完成时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}\r\n"; }); //使用工厂创建一个工作任务项,并执行了 //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); }
服务端
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; } } }
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; } } }