客户端


接口 C# 请求数据 模拟多线程下载文件_线程池接口 C# 请求数据 模拟多线程下载文件_应用程序_02


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

 

服务端


接口 C# 请求数据 模拟多线程下载文件_线程池接口 C# 请求数据 模拟多线程下载文件_应用程序_02


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

接口 C# 请求数据 模拟多线程下载文件_线程池接口 C# 请求数据 模拟多线程下载文件_应用程序_02


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