异步测试代码
System.Diagnostics.Debug.Print("start"); new Thread(new ThreadStart(new Action(() => { for (int i = 0; i < 10; i++) { System.Diagnostics.Debug.Print(i + "\r\n"); }System.Diagnostics.Debug.Print("Thread over"); }))).Start(); System.Diagnostics.Debug.Print("Main over");
输出
"start" "Main over" "0\r\n" "1\r\n" "2\r\n" "3\r\n" "4\r\n" "5\r\n" "6\r\n" "7\r\n" "8\r\n" "9\r\n" "Thread over"
效果是主线程已经结束了,子线程才开始
var url = "http://h5.ktgj.com/"; var list_task = new List>(); for (int i = 0; i < 10; i++) { var temp_url = url + i; var task = Task.Run(async () => { System.Diagnostics.Debug.Print("temp_url=" + temp_url); var client = new System.Net.Http.HttpClient(); var html = await client.GetStringAsync(temp_url); System.Diagnostics.Debug.Print("temp_url=" + temp_url + " is ok"); return html; }); list_task.Add(task); }Task.WaitAll(list_task.ToArray()); foreach (var item in list_task) { System.Diagnostics.Debug.Print(item.Result); }
【c#|【NET多线程】C#多线程异步请求多个url地址】
Task.WaitAll()
等所有请求都返回了html,才开始后续处理
//await Task.WhenAll(task1, task2, task3); //ThreadPool.QueueUserWorkItem(_ => //{ //Thread.Sleep(1000); //Thread.Sleep(10); System.Diagnostics.Debug.Print("ThreadPool.QueueUserWorkItem"); //}); ////不使用await:Task多线程 //Task.Run(() => //{ //Thread.Sleep(1000); //Thread.Sleep(10); System.Diagnostics.Debug.Print("Task.Run"); //});
转载于:https://www.cnblogs.com/jhli/p/9213615.html
推荐阅读
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 爬虫|若想拿下爬虫大单,怎能不会逆向爬虫,价值过万的逆向爬虫教程限时分享
- c语言|C语言初期学习遇到的特殊点 【三子棋详解】【初学者福音,详细总结,复习能手】
- C#|C# 文件路径操作
- python|尚硅谷python爬虫(二)-解析方法
- C# 接口实例
- Python|Python实战(使用线性回归预测房价)
- IC|数字IC后端真的不如前端设计和验证吗()
- Python|教你写个简单好用的Python脚本一键自动整理文件非常适合办公用~