Atitit. Async await 优缺点 异步编程的原理and实现 java c# php

1. async & await的来源1

2. 异步编程history1

2.1. 线程池 2

2.2. 返回值2

2.3. Semaphore 信号量2

2.4. 线程的异常,主线程可以捕获到么2

3. await并不是针对于async的方法,而是针对async方法所返回给我们的Task,2

4. Java里面的task 跟个 await3

5. ---code4

6. async & await的缺点4

7. ref5

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的更多相关文章

  1. [.NET] 利用 async & await 的异步编程

    利用 async & await 的异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/5922573.html  目录 异步编程的简介 异 ...

  2. 利用 async & await 的异步编程

    走进异步编程的世界 - 开始接触 async/await 利用 async & await 的异步编程 async 的三大返回类型 公司技术需求备忘录

  3. 用 Python 3 的 async / await 做异步编程

    前年我曾写过一篇<初探 Python 3 的异步 IO 编程>,当时只是初步接触了一下 yield from 语法和 asyncio 标准库.前些日子我在 V2EX 看到一篇<为什么 ...

  4. 使用 async/ await 进行 异步 编程

    一.异步函数 异步函数概念. 通常 是 指用 async 修饰 符 声明 的, 可 包含 await 表达式 的 方法 或 匿名 函数 1. 从 语言 的 视角 来看, 这些 await 表达式 正是 ...

  5. [.NET] 利用 async & await 进行异步 IO 操作

    利用 async & await 进行异步 IO 操作 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6082673.html  序 上次,博主 ...

  6. Atitit.异步编程技术原理与实践attilax总结

    Atitit.异步编程技术原理与实践attilax总结 1. 俩种实现模式 类库方式,以及语言方式,java futuretask ,c# await1 2. 事件(中断)机制1 3. Await 模 ...

  7. 【转】【C#】C# 5.0 新特性——Async和Await使异步编程更简单

    一.引言 在之前的C#基础知识系列文章中只介绍了从C#1.0到C#4.0中主要的特性,然而.NET 4.5 的推出,对于C#又有了新特性的增加--就是C#5.0中async和await两个关键字,这两 ...

  8. 转:[你必须知道的异步编程]C# 5.0 新特性——Async和Await使异步编程更简单

    本专题概要: 引言 同步代码存在的问题 传统的异步编程改善程序的响应 C# 5.0 提供的async和await使异步编程更简单  async和await关键字剖析 小结 一.引言 在之前的C#基础知 ...

  9. [你必须知道的异步编程]C# 5.0 新特性——Async和Await使异步编程更简单

    本专题概要: 引言 同步代码存在的问题 传统的异步编程改善程序的响应 C# 5.0 提供的async和await使异步编程更简单  async和await关键字剖析 小结 一.引言 在之前的C#基础知 ...

随机推荐

  1. HDU1142 A Walk Through the Forest(dijkstra)

    A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

  2. small test on 5.30 night T1

    数学题使劲推就对了. 让我们设  g(x) = ∑ C(i,x) * b^i ,然后后面验算了一张纸QWQ,懒得再打一遍了,回家我就把这张演算纸补上QWQ,先上代码. #include<cstd ...

  3. 【AC自动机】zoj3228 Searching the String

    对所有模式串建立AC自动机. 每个单词结点要记录该单词长度. 然后在跑匹配的时候,对每个单词结点再处理3个值,代表可重叠的匹配次数,不可重叠的匹配次数,以及“上一次不可重叠的匹配位置”,这样结合单词长 ...

  4. 【二维偏序】【树状数组】【权值分块】【分块】poj2352 Stars

    经典问题:二维偏序.给定平面中的n个点,求每个点左下方的点的个数. 因为 所有点已经以y为第一关键字,x为第二关键字排好序,所以我们按读入顺序处理,仅仅需要计算x坐标小于<=某个点的点有多少个就 ...

  5. 【最短路】【spfa】小vijos P1447 Updown

    小vijos P1447 Updown 背景 开启了升降梯的动力之后,探险队员们进入了升降梯运行的那条竖直的隧道,映入眼帘的是一条直通塔顶的轨道.一辆停在轨道底部的电梯.和电梯内一杆控制电梯升降的巨大 ...

  6. python操作mysql封装成类

    import pymysqlimport loggingimport sys # 加入日志#获取logger实例logger = logging.getLogger("baseSpider& ...

  7. 【R笔记】R语言进阶之4:数据整形(reshape)

    R语言进阶之4:数据整形(reshape) 2013-05-31 10:15 xxx 网易博客 字号:T | T 从不同途径得到的数据的组织方式是多种多样的,很多数据都要经过整理才能进行有效的分析,数 ...

  8. JS面向对象之原型

    面向对象之原型 为什么要使用原型 由于 js 是解释执行的语言, 那么在代码中出现的函数与对象, 如果重复执行, 那么会创建多个副本, 消耗更多的内存, 从而降低性能 传统构造函数的问题 functi ...

  9. Eclipse新建java类的时候,自动创建注释

    为形成个人的java代码风格,我们在项目组中进行开发的时候,可以对自己的代码进行一些格式上面的设置,具体如下: 方法一:Eclipse中设置在创建新类时自动生成注释 windows–>prefe ...

  10. [Git] git merge和rebase的区别

    git merge 会生成一个新得合并节点,而rebase不会 比如: D---E test / A---B---C---F master 使用merge合并, 为分支合并自动识别出最佳的同源合并点: ...