基于任务的异步模式(TAP)
Task
.net 4.0为我们带来了Task的异步,我们有以下三种方法创建Task。
1,Task.Factory.StartNew,比较常用。
2,Task.Run,是.net 4.5中增加的。
3,Task.FromResult,如果结果是已计算,就可以使用这种方法来创建任务。
下面就以Task.Factory.StartNew继续来实现前面的那个例子,代码如下。
1 /// <summary> 2 /// 使用Task,Task.Factory.StartNew,会创建新的线程 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void button4_Click(object sender, EventArgs e) 7 { 8 this.richTextBox1.Text = "正在处理请求..."; 9 10 Task.Factory.StartNew(() => 11 { 12 //下面这段代码可封装一下,一个没有返回值的方法 13 var url = this.textBox1.Text.Trim(); 14 var request = HttpWebRequest.Create(url); 15 var response = request.GetResponse(); 16 var stream = response.GetResponseStream(); 17 using (StreamReader reader = new StreamReader(stream)) 18 { 19 var content = reader.ReadToEnd(); 20 this.richTextBox1.Text = content; 21 } 22 }); 23 }
View Code
Task相较ThreadPool线程池使用更简单,而且支持线程的取消,完成和失败通知等交互性操作,而这些是ThreadPool所没有的。并且Task是可以有返回值的。
async/await
async&await是.net 4.5新增的特性,
下面还是使用async&await实现一遍之前的例子,代码如下。
1 /// <summary> 2 /// 使用async/await 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private async void button5_Click(object sender, EventArgs e) 7 { 8 this.richTextBox1.Text = "正在处理请求..."; 9 10 await DoWorkAsync(); 11 } 12 13 public async Task DoWorkAsync() 14 { 15 var url = this.textBox1.Text.Trim(); 16 var request = HttpWebRequest.Create(url); 17 var response = request.GetResponse(); 18 var stream = response.GetResponseStream(); 19 using (StreamReader reader = new StreamReader(stream)) 20 { 21 var content = reader.ReadToEnd(); 22 this.richTextBox1.Text = content; 23 } 24 }
View Code
有以下疑问:
1,看起来使用了async,UI线程还是会阻塞?
2,使用async并没有创建一个新的线程?
基于任务的异步模式(TAP)相关推荐
- F#与ASP.NET(1):基于事件的异步模式与异步Action
提高ASP.NET应用程序伸缩性的有效手段之一便是使用异步请求.而在ASP.NET MVC 1中是不能直接支持异步Action的,因此我们需要使用一些简单的Hack方式来实现这一点.不过简单的Hack ...
- 基于事件的异步模式——BackgroundWorker
转自strangeman原文 基于事件的异步模式--BackgroundWorker 实现异步处理的方法很多,经常用的有基于委托的方式,今天记录的是基于事件的异步模式.利用BackgroundWork ...
- C# 基于事件的异步模式
点击蓝字 关注我们 开工大吉 EventBasedAsyncPattern 方法使用了基于事件的异步模式.这个模式定义了一个带有 "Async" 后缀的方法.示例代码再次使用了We ...
- 基于事件的异步模式概述
基于事件的异步模式概述 MSDN 那些同时执行多项任务.但仍能响应用户交互的应用程序通常需要实施一种使用多线程的设计方案.System.Threading 命名空间提供了创建高性能多线程应用程序所必需 ...
- APM之基于事件的异步模式(EAP)-2
EAP是针对Windows窗体开发提供的方便使用的异步模式,可以在IDE中可视化的设计和使用 // The System.Net.WebClient class supports the Event- ...
- .NET三种异步模式(APM、EAP、TAP)
APM模式: .net 1.0时期就提出的一种异步模式,并且基于IAsyncResult接口实现BeginXXX和EndXXX类似的方法. .net中有很多类实现了该模式(比如HttpWebReque ...
- 【转】1.7异步编程:基于事件的异步编程模式(EAP)
传送门:异步编程系列目录-- 上一篇,我给大家介绍了".NET1.0 IAsyncResult异步编程模型(APM)",通过Begin*** 开启操作并返回IAsyncResult ...
- 与其他.Net异步模式和类型进行互操作
返回该系列目录<基于Task的异步模式--全面介绍> Tasks和异步编程模型APM(Tasks and the Asynchronous Programming Model) 从APM到 ...
- 【转】异步编程:.NET 4.5 基于任务的异步编程模型(TAP)
最近我为大家陆续介绍了"IAsyncResult异步编程模型 (APM)"和"基于事件的异步编程模式(EAP)"两种异步编程模型.在.NET4.0 中Micro ...
最新文章
- 线上分享会预告之三维模型检索技术介绍
- Deep Learning for 3D Point Clouds: A Survey 论文阅读
- 青岛大学计算机专硕和学硕,【2020】【青岛大学】【学硕646】复习经验
- pinpoint 安装部署
- 使用xmlhttp结合asp,实现网页的异步调用_asp实例
- 神经网络如何处理测试阶段出现的新特征?面向开放环境特征外推的图学习解决方案...
- InfaSkin Probiotic Ecologic Panda 30 Sachets
- 给定数字的全部组合实现方式
- Hibernate入门级实例
- Java十进制转二、八、十六进制方法
- 自己写的一个asp.net-cookies购物车类
- matlab练习程序(图像放大/缩小,双立方插值)
- iSH ssh 安装
- 谷歌浏览器提示因应用程序的并行配置不正确无法启动
- 苹果4创建id显示服务器错误,苹果无法创建账户是什么意思
- ASP.NET 教程
- docsify(一):新增PDF目录、封面功能
- Python:for...in range() 、 for...in enumerate() 、for...in() 、for...in zip()的用法
- 《声声慢·寻寻觅觅》 李清照
- Homekit智能家居DIY一智能插座