Atitit. Async await 优缺点 异步编程的原理and实现 java c# php
Atitit. Async await 优缺点 异步编程的原理and实现 java c# php
3. await并不是针对于async的方法,而是针对async方法所返回给我们的Task,2
1. async & await的来源
不个异步的操作语言级别来完成.. 趋势..
2. 异步编程history
1. static void Main(){
2. new Thread(Go).Start(); // .NET 1.0开始就有的
3. Task.Factory.StartNew(Go); // .NET 4.0 引入了 TPL
4. Task.Run(new Action(Go)); // .NET 4.5 新增了一个Run的方法
5. }
6.
7. public static void Go(){
8. Console.WriteLine("我是另一个线程");
9. }
这里面需要注意的是,创建Thread的实例之后,需要手动调用它的Start方法将其启动。但是对于Task来说,StartNew和Run的同时,既会创建新的线程,并且会立即启动它。
作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://www.cnblogs.com/attilax/
2.1. 线程池
线程的创建是比较占用资源的一件事情,.NET 为我们提供了线程池来帮助我们创建和管理线程。Task是默认会直接使用线程池,但是Thread不会。如果我们不使用Task,又想用线程池的话,可以使用ThreadPool类。
2.2. 返回值
Thead是不能返回值的,但是作为更高级的Task当然要弥补一下这个功能。
2.3. Semaphore 信号量
我实在不知道这个单词应该怎么翻译,从官方的解释来看,我们可以这样理解。它可以控制对某一段代码或者对某个资源访问的线程的数量,超过这个数量之后,其它的线程就得等待,只有等现在有线程释放了之后,下面的线程才能访问。这个跟锁有相似的功能,只不过不是独占的,它允许一定数量的线程同时访问。
2.4. 线程的异常,主线程可以捕获到么
3. await并不是针对于async的方法,而是针对async方法所返回给我们的Task,
await 实质是在调用awaitable对象的GetResult方法
这也是为什么所有的async方法都必须返回给我们Task。所以我们同样可以在Task前面也加上await关键字,这样做实际上是告诉编译器我需要等这个Task的返回值或者等这个Task执行完毕之后才能继续往下走。
Task.GetAwaiter()和await Task 的区别?
Task.GetAwait()方法会给我们返回一个awaitable的对象,通过调用这个对象的GetResult方法就会挂起主线程,当然也不是所有的情况都会挂起。还记得我们Task的特性么? 在一开始的时候就启动了另一个线程去执行这个Task,当我们调用它的结果的时候如果这个Task已经执行完毕,主线程是不用等待可以直接拿其结果的,如果没有执行完毕那主线程就得挂起等待了。
4. Java里面的task 跟个 await
Java中的是个futureTask走十.net 中的task..
java还没语法级别的await,,只可以当库的模式实现..
FutureTask async_task=taskService.async(()->{
String echo1 = echoCmdResult_asStr(process.getInputStream());
System.out.println("--echo1:"+echo1);
returnecho1;
},10);
new Thread(async_task).start();
System.out.println("--start get err stream"+filex.getUUidName());
FutureTask async_task_err=taskService.async(()->{
String echo2 = echoCmdResult_asStr(process.getErrorStream());
System.out.println("--echo2:"+echo2);
returnecho2;
},10);
new Thread(async_task_err).start();
r=taskService.<String>await(async_task, 15, "$output_timeout_ex");
System.out.println("-- finish await std stream"+filex.getUUidName());
System.out.println("----------------------------------------");
System.out.println("--start await err stream"+filex.getUUidName());
String err=taskService.<String>await(async_task_err,1, "$err_stream_timeout_ex");
5. ---code
public FutureTask async(Callable object, int timeout_secs ) {
FutureTask<String> task = new FutureTask<String>(object);
this.timeout_secs=timeout_secs;
check_time_out(task);
return task;
}
public <t> t await(FutureTask<t> async_task, int timeout_secs2, Object defVal) {
try {
return async_task.get(timeout_secs2, TimeUnit.SECONDS);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TimeoutException e) {
async_task.cancel(true);
}
return (t) defVal;
}
6. async & await的缺点
只对task型的效果....不能常用的code..
只好使用task +lambda包装一哈...
FutureTask async_task_err=taskService.async(()->{
String echo2 = echoCmdResult_asStr(process.getErrorStream());
System.out.println("--echo2:"+echo2);
returnecho2;
},10);
new Thread(async_task_err).start();
String err=taskService.<String>await(async_task_err,1, "$err_stream_timeout_ex");
7. ref
async & await 的前世今生 - 51CTO.COM.htm
Atitit. Async await 优缺点 异步编程的原理and实现 java c# php的更多相关文章
- [.NET] 利用 async & await 的异步编程
利用 async & await 的异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/5922573.html 目录 异步编程的简介 异 ...
- 利用 async & await 的异步编程
走进异步编程的世界 - 开始接触 async/await 利用 async & await 的异步编程 async 的三大返回类型 公司技术需求备忘录
- 用 Python 3 的 async / await 做异步编程
前年我曾写过一篇<初探 Python 3 的异步 IO 编程>,当时只是初步接触了一下 yield from 语法和 asyncio 标准库.前些日子我在 V2EX 看到一篇<为什么 ...
- 使用 async/ await 进行 异步 编程
一.异步函数 异步函数概念. 通常 是 指用 async 修饰 符 声明 的, 可 包含 await 表达式 的 方法 或 匿名 函数 1. 从 语言 的 视角 来看, 这些 await 表达式 正是 ...
- [.NET] 利用 async & await 进行异步 IO 操作
利用 async & await 进行异步 IO 操作 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6082673.html 序 上次,博主 ...
- Atitit.异步编程技术原理与实践attilax总结
Atitit.异步编程技术原理与实践attilax总结 1. 俩种实现模式 类库方式,以及语言方式,java futuretask ,c# await1 2. 事件(中断)机制1 3. Await 模 ...
- 【转】【C#】C# 5.0 新特性——Async和Await使异步编程更简单
一.引言 在之前的C#基础知识系列文章中只介绍了从C#1.0到C#4.0中主要的特性,然而.NET 4.5 的推出,对于C#又有了新特性的增加--就是C#5.0中async和await两个关键字,这两 ...
- 转:[你必须知道的异步编程]C# 5.0 新特性——Async和Await使异步编程更简单
本专题概要: 引言 同步代码存在的问题 传统的异步编程改善程序的响应 C# 5.0 提供的async和await使异步编程更简单 async和await关键字剖析 小结 一.引言 在之前的C#基础知 ...
- [你必须知道的异步编程]C# 5.0 新特性——Async和Await使异步编程更简单
本专题概要: 引言 同步代码存在的问题 传统的异步编程改善程序的响应 C# 5.0 提供的async和await使异步编程更简单 async和await关键字剖析 小结 一.引言 在之前的C#基础知 ...
随机推荐
- date conversion
SELECT to_char(sysdate,'yyyymmdd hh:mi:ss'), to_char(sysdate ,'yyyymmdd hh:mi:ss'), to_char(sysdate ...
- [BZOJ 1801] Chess
Link: BZOJ 1801 传送门 Solution: 一眼看过去又像是状压$dp$的经典模型…… 但此题$n,m\le 100$ ,直接跑状压只有50分 此时要发现这道题的特点:每行/列不能放置 ...
- 【矩阵乘法】【快速幂】【递推】斐波那契数列&&矩乘优化递推模板
题目大意: F[0]=0 F[1]=1 F[n+2]=F[n+1]+F[n] 求F[n] mod 104. F[n+2] F[n+1] = 1 1 1 0 * F[n+1] F[n] 记这个矩阵为A, ...
- hadoop map(分片)数量确定
之前学习hadoop的时候,一直希望可以调试hadoop源码,可是一直没找到有效的方法,今天在调试矩阵乘法的时候发现了调试的方法,所以在这里记录下来. 1)事情的起因是想在一个Job里设置map的数量 ...
- url参数的获取
方法 function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&am ...
- ListView控件(下)简单适配器
(一) 1.效果图 2.activiy_main.xml <?xml version="1.0" encoding="utf-8"?> <Li ...
- 求同余方程x^A=B(mod m)的解个数(原根与指标)
求方程:的解个数 分析:设,那么上述方程解的个数就与同余方程组:的解等价. 设同于方程的解分别是:,那么原方程的解的个数就是 所以现在的关键问题是求方程:的解个数. 这个方程我们需要分3类讨论: 第一 ...
- CSS:display:table
使用display:table 垂直居中需要结合display:table-cell; 和vertical-align:middle; <!DOCTYPE html> <html l ...
- 利用LogParser分析IIS日志
LogParser是微软官方出品的用于读取分析IIS日志的工具,使用类SQL语句过滤文本日志内容,并可将内容导出到csv.sqlserver作进一步分析 下载地址:http://www.micr ...
- [转载]Delphi Tokyo 10.2.3发布了
转载:http://blog.sina.com.cn/s/blog_44fa172f0102wwwg.html 今早最好的消息,Delphi 10.2.3如期发布,下载地址:http://altd.e ...