基于任务的异步模式(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 }
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 }
有以下疑问:
1,看起来使用了async,UI线程还是会阻塞?
2,使用async并没有创建一个新的线程?
基于任务的异步模式(TAP)的更多相关文章
- 三、基于任务的异步模式(TAP),推荐使用
一.引言 在上两个专题中我为大家介绍.NET 1.0中的APM和.NET 2.0中的EAP,在使用前面两种模式进行异步编程的时候,大家多多少少肯定会感觉到实现起来比较麻烦, 首先我个人觉得,当使用AP ...
- .NET 基于任务的异步模式(Task-based Asynchronous Pattern,TAP) async await
本文内容 概述 编写异步方法 异步程序中的控制流 API 异步方法 线程 异步和等待 返回类型和参数 参考资料 下载 Demo 下载 Demo TPL 与 APM 和 EAP 结合(APM 和 EAP ...
- C#5.0之后推荐使用TPL(Task Parallel Libray 任务并行库) 和PLINQ(Parallel LINQ, 并行Linq). 其次是TAP(Task-based Asynchronous Pattern, 基于任务的异步模式)
学习书籍: <C#本质论> 1--C#5.0之后推荐使用TPL(Task Parallel Libray 任务并行库) 和PLINQ(Parallel LINQ, 并行Linq). 其次是 ...
- 实践基于Task的异步模式
Await 返回该系列目录<基于Task的异步模式--全面介绍> 在API级别,实现没有阻塞的等待的方法是提供callback(回调函数).对于Tasks来说,这是通过像ContinueW ...
- 实现基于Task的异步模式
返回该系列目录<基于Task的异步模式--全面介绍> 生成方法 编译器生成 在.NET Framework 4.5中,C#编译器实现了TAP.任何标有async关键字的方法都是异步方法,编 ...
- 基于Task的异步模式的定义
返回该系列目录<基于Task的异步模式--全面介绍> 命名,参数和返回类型 在TAP(Task-based Asynchronous Pattern)中的异步操作的启动和完成是通过一个单独 ...
- 基于事件的异步模式(EAP)
什么是EAP异步编程模式 EAP基于事件的异步模式是.net 2.0提出来的,实现了基于事件的异步模式的类将具有一个或者多个以Async为后缀的方法和对应的Completed事件,并且这些类都支持异步 ...
- 基于Task的异步模式--全面介绍
今天是国庆长假第一天,也是今天十月的开始.每到这个时候都是看海的季节-一个看"人海"的季节.反正我是不想在这样一个尴尬期出去放松自己,于是不如在家写写博客,长点本领呢.今天就来给大 ...
- Event-based Asynchronous Pattern Overview基于事件的异步模式概览
https://msdn.microsoft.com/zh-cn/library/wewwczdw(v=vs.110).aspx Applications that perform many task ...
随机推荐
- android 触摸事件分析
背景知识: 触摸屏可以有多个触控点 android中管理触控点通过一个数组来管理,涉及到index和id两个变量, index表示在数组中的下标,id表示这个触控点(pointer)的id,point ...
- Redis3.2+Tomcat实现集群的Session管理 -- tomcat-redis-session-manager的编译和开发部署环境搭建
已经有不少文章介绍使用tomcat-redis-session-manager来实现Redis存储Tomcat的Session,实现分布式Session管理.但是现在官方编译的tomcat-redis ...
- spring.net学习(一) 搭建环境,实例化spring.net容器。
1,使用nuget安装SPring.Core.安装这个的同时,会把Common.Logging,Common.Logging.Core也装上. 2,建立对象配置xml文件.如图Objects.xml. ...
- android studio 控制台中文乱码
解决办法,在java工程目录下的build.gradle添加如下代码,然后重新运行一遍. tasks.withType(JavaCompile) { options.encoding = " ...
- PHP_EOL
PHP中除去换行符 $str = str_replace(array("\r\n", "\r", "\n"), "", ...
- road习题(二)
答案:[C] 解析:2 8 原则,考虑的是最高峰,所以安装12小时算 ,80%的 PV 也就是访问都是在 早上6点到下午6点这12个小时里,晚上6点到早上6点的PV总量是40000 ,服务器台数为3, ...
- scss编译
SASS?SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护. sass有两种后缀名文件: sass(不使用大括号和分号)---不建议使用 ...
- OO的五大原则是指SRP、OCP、LSP、DIP、ISP。
OO的高层原则,面向对象设计的基本原则 设计模式之六大原则--开闭原则(OCP) 设计模式之六大原则--迪米特法则(LoD,LKP) 设计模式之六大原则--接口隔离原则(ISP) 设计模式之六大原则- ...
- shell获得python的print的值
#!/usr/bin/env python print('aaa') #!/bin/bash var=`python testpython.py` (注意这个引号,是反引号,Tab上面的那个...) ...
- <css篇>关于页面的绝对定位与相对定位,且支持页面各元素自适应
(哈哈,第一次写博客,简称处贴?主要记录下平时工作中遇到的问题及其解决方案,方便以后解决此类问题.) 话不多说,上代码看吧 代码有点乱,以后自己能看得懂就行咯 <body > <di ...