接口 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);
}
View Code

 

服务端

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;
            }
        }
    }
View Code
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;
            }
        }
    }
View Code

 

posted @ 2018-08-09 14:23  古兴越  阅读(1095)  评论(0编辑  收藏  举报