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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM