• 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")}
    ";
    
        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);
    }
    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
  • 相关阅读:
    nginx 配置7层代理
    还用老套路分析财务数据?这3种财务分析方法,你一定得看看
    nginx 4层代理
    【手绘漫画】面试必考之手撕单链表(解题模板和深度剖析),(LeetCode 707)
    连载三:Oracle升级文档大全
    隐私保护与价值挖掘之利器
    PTA刷题笔记(C语言) | 7-42 整除光棍 (20分)
    django 页面缓存
    C++建议
    读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组
  • 原文地址:https://www.cnblogs.com/guxingy/p/9448691.html
Copyright © 2020-2023  润新知