关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

云南大王-一个简单的例子看明白 async await Task

发布时间:2020-04-16 00:00:00
测试代码: 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading; 9 using System.Threading.Tasks; 10 using System.Windows.Forms; 11 using Utils; 12 13 namespace test 14 { 15 public partial class Form1 : Form 16 { 17 public Form1() 18 { 19 InitializeComponent(); 20 } 21 22 private void Form1_Load(object sender, EventArgs e) 23 { 24 25 } 26 27 /// 28 /// 执行任务 29 /// 30 public string DoWork(string str) 31 { 32 Thread.Sleep(3000); //模拟延迟 比如网络请求 用了3000毫秒 33 return "输出:" + str; 34 } 35 36 /// 37 /// 执行任务 38 /// 39 public Task DoWorkByTask(string str) 40 { 41 return Task.Run(() => 42 { 43 Thread.Sleep(3000); //模拟延迟 比如网络请求 用了3000毫秒 44 return "输出:" + str; 45 }); 46 } 47 48 /// 49 /// 测试1 50 /// 51 private async void button1_Click(object sender, EventArgs e) 52 { 53 LogTimeUtil logTime = new LogTimeUtil(); 54 55 var t1 = DoWorkByTask("测试值1"); 56 57 var t2 = DoWorkByTask("测试值2"); 58 59 string r1 = await t1; 60 61 textBox1.AppendText(r1 + "\r\n"); 62 63 string r2 = await t2; 64 65 textBox1.AppendText(r2 + "\r\n"); 66 67 logTime.LogTime("耗时", textBox1); 68 } 69 70 /// 71 /// 测试2 72 /// 73 /// 等效于 测试1 74 /// 75 private void button2_Click(object sender, EventArgs e) 76 { 77 Task.Run(() => //如果不加Task.Run,界面会卡 78 { 79 LogTimeUtil logTime = new LogTimeUtil(); 80 81 Task t1 = Task.Run(() => { return DoWork("测试值1"); }); 82 Task t2 = Task.Run(() => { return DoWork("测试值2"); }); 83 84 Task.WaitAll(t1, t2); 85 86 this.Invoke(new Action(() => //线程中修改控件数据要使用Invoke 87 { 88 textBox1.AppendText(t1.Result + "\r\n"); 89 textBox1.AppendText(t2.Result + "\r\n"); 90 })); 91 92 logTime.LogTime("耗时", textBox1); 93 }); 94 } 95 96 /// 97 /// 测试3 98 /// 99 private async void button3_Click(object sender, EventArgs e) 100 { 101 LogTimeUtil logTime = new LogTimeUtil(); 102 103 var r1 = await DoWorkByTask("测试值1"); 104 105 textBox1.AppendText(r1 + "\r\n"); 106 107 var r2 = await DoWorkByTask("测试值2"); 108 109 textBox1.AppendText(r2 + "\r\n"); 110 111 logTime.LogTime("耗时", textBox1); 112 } 113 114 /// 115 /// 测试4 116 /// 117 /// 等效于 测试3 118 /// 119 private void button4_Click(object sender, EventArgs e) 120 { 121 Task.Run(() => //如果不加Task.Run,界面会卡 122 { 123 LogTimeUtil logTime = new LogTimeUtil(); 124 125 Task t1 = Task.Run(() => { return DoWork("测试值1"); }); 126 t1.Wait(); 127 this.Invoke(new Action(() => //线程中修改控件数据要使用Invoke 128 { 129 textBox1.AppendText(t1.Result + "\r\n"); 130 })); 131 132 Task t2 = Task.Run(() => { return DoWork("测试值2"); }); 133 t2.Wait(); 134 this.Invoke(new Action(() => //线程中修改控件数据要使用Invoke 135 { 136 textBox1.AppendText(t2.Result + "\r\n"); 137 })); 138 139 logTime.LogTime("耗时", textBox1); 140 }); 141 } 142 143 } 144 } View Code 测试输出: 附 LogTimeUtil.cs: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Utils { /// /// 记录耗时 /// public class LogTimeUtil { private DateTime _lastTime; public LogTimeUtil() { _lastTime = DateTime.Now; } /// /// 记录耗时 /// public void LogTime(string msg) { double d = DateTime.Now.Subtract(_lastTime).TotalSeconds; LogUtil.Log(msg + ",耗时:" + d.ToString("0.000") + " 秒"); } /// /// 记录耗时 /// public void LogTime(string msg, TextBox txt) { double d = DateTime.Now.Subtract(_lastTime).TotalSeconds; msg = msg + ",耗时:" + d.ToString("0.000") + " 秒\r\n"; if (txt.InvokeRequired) { txt.Invoke(new Action(() => { txt.AppendText(msg); })); } else { txt.AppendText(msg); } } } } View Code  

相关阅读

云南网站建设初期应该注意哪些问题云南网站建设中原创文章对网站起什么作用Javascript中如何中断forEach循环云南零售小程序前景怎么样?如何优化WEB应用数据库访问慢的问题?Javascript中用let和var声明变量的区别是什么redis 的主从复制和哨兵?递归和迭代有何区别?<input> 标签的 readonly 属性怎么用?云南网站建设中网页版商城如何保证网站安全云南企业官网如何推广云南企业网站建设为什么把文章类型的栏目排在前面云南餐饮小程序能带给餐饮业什么?云南网站建设需要注意什么地方云南云服务器配置如何选择合适的云南网站建设和网站设计有何区别?云南网站建设—企业官网的好处在哪?云南做小程序的优势在哪?为什么建议做小程序?网站为什么要配置ssl证书?网站为什么要做seo,做seo有什么好处?微信小程序_企业付款到零钱 API 开发如何利用缓存提高asp.net网站访问速度中小型企业如何选择服务器配置?如何优化中小型企业网站C#.net做网站后台 需要记录日志基于asp.net企业门户网站设计霓裳民族服装seo优化分析建议Javascript的函数封装认识及使用Ajax请求中data与后端的交互有哪几种方法JavaScript如何实现组合模式???SQL之子查询的基本用法有哪些?什么是静态测试、动态测试、黑盒测试、白盒测试、α测试 β测试?C# 引入委托的目的是什么c# 委托的本质是什么C# DataGridView添加新行的2个方法C#支付宝扫码支付代码完整版c# MVC 微信支付教程系列之扫码支付代码实例Redis基础通用操作指令有哪些?String、StringBuffer和StringBuilder的各自用法常见的一些Dos命令有哪些?如何在C#中复制一个Windows窗体类前端js中的运算符的种类,=、==与===的有何区别?网站前端怎么设置页面禁止转载?解决XSS脚本攻击恶意代码的方法你知道?javascript 之 apply()、call() 探索net core实现跨域ASP.NET Core程序部署到LinuxASP.NET Core使用AutoMapper.NET Core:处理全局异常.NET Core在ASP.NET Core WebApi中使用CookieASP.NET Core:ASP.NET Core中使用NLog记录日志如何重启iis服务器SQL Server代理服务无法启动怎么办js 判断手机版与PC版自适应跳转升级版 PC版手机版界面对应跳转IIS服务器SSL证书安装js 判断手机版与PC版自适应跳转C#截取字符串的方法C# 中使用正则表达式验证手机号、身份证号码强制性修改div框里出现的css值VS2017调试代码显示“当前无法命中断点,还没有为该文档加载任何符号”js获取当前域名、Url、相对路径和参数以及指定参数JavaScript数组整理C# 对象和类型总结关于javascript跳转与返回和刷新页面Express中的中间件简介及用法JS的原型和继承webstorm的 Emmet 快捷方式什么是Redis缓存的雪崩、击穿、穿透Cookie的基本介绍和场景Vue.js中keep-alive缓存(页面+滚动条)HTML5在客户端是如何存储数据的?MySQL中多表操作有哪些?Cookie与Session的认识使用集合组织相关数据深入C#数据类型c#中的委托简单认识.NET框架密码学系列——常见的加密方式有哪些.NET 异步详解线程池的五种实现方式centos7系统中忘记了root管理员账号密码的解决方式公司管理必须的20条军规[参考]云南昆明天猫旗舰店如何开_怎么开_要什么条件云南大王-通俗理解spring源码(三)—— 获取xml的验证模式 云南大王-用户登录 云南大王-【Golang进阶】指针的详细讲解 云南大王-Java 单线程代码ThreadLocal串值问题 云南大王-Java 实例级别的锁和类级别的锁 云南大王-工作流引擎会签,加签,主持人,组长模式专题讲解 云南大王-Android连载5云南大王-NTP对时器(NTP对时服务器)重要性!京准电子科技 云南大王-关于redis单线程的分析 云南大王-CVE云南大王-PHP SESSION反序列化本地样例分析 云南大王-这不就是多线程ThreadPoolExecutor和阻塞队列吗 云南大王-Tomcat AJP 文件包含漏洞(CVE云南大王-讲真,这两款idea插件,能治愈你英语不好的病 云南大王-消息中间件ActiveMQ、RabbitMQ、RocketMQ、ZeroMQ、Kafka如何选型? 云南大王-JVM系列十三(类加载器). 云南大王-Win10安装MySQL8压缩包版
/template/Home/Zkeys/PC/Static