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

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:[email protected]

转载请注明来源: 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

时间: 2024-08-04 10:14:53

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

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

利用 async & await 的异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/5922573.html  目录 异步编程的简介 异步提高响应能力 更容易编写的异步方法 异步方法的控制流 线程 async 和 await 返回类型和参数信息 命名的约定 一.异步编程的简介 通过使用异步编程,你可以避免性能瓶颈并增强应用程序的总体响应能力. Visual Studio 2012 引入了一个简化的方法,异步编程,在 .NET Framewo

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

一.引言 在之前的C#基础知识系列文章中只介绍了从C#1.0到C#4.0中主要的特性,然而.NET 4.5 的推出,对于C#又有了新特性的增加--就是C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作,下面就具体看看编译器到底在背后帮我们做了哪些复杂的工作的. 二.同步代码存在的问题 对于同步的代码,大家肯定都不陌生,因为我们平常写的代码大部分都是同步的,然而同步代码却存在一个很严重的问题,例如我们向一个Web服务器发出一个

Async和Await进行异步编程

使用Async和Await进行异步编程(C#版 适用于VS2015) 你可以使用异步编程来避免你的应用程序的性能瓶颈并且加强总体的响应.然而,用传统的技术来写异步应用是复杂的,同时编写,调试和维护都很困难. VS2012介绍了简单的方法,那就是异步编程,它在.Net Framework 4.5和Windows 运行时提供了异步支持.编译器做了开发者以前做的困难的工作,而且你的应用保持了类似于异步代码的逻辑结构.结果,你轻易地就获得了所有异步编程的优势. 异步提升响应 异步对于可能阻塞的活动是至关

使用Async和Await进行异步编程(C#版 适用于VS2015)

你可以使用异步编程来避免你的应用程序的性能瓶颈并且加强总体的响应.然而,用传统的技术来写异步应用是复杂的,同时编写,调试和维护都很困难. VS2012介绍了简单的方法,那就是异步编程,它在.Net Framework 4.5和Windows 运行时提供了异步支持.编译器做了开发者以前做的困难的工作,而且你的应用保持了类似于异步代码的逻辑结构.结果,你轻易地就获得了所有异步编程的优势. 异步提升响应 异步对于可能阻塞的活动是至关重要的.例如当你的应用访问Web的时候,访问web资源有时有点慢或者延

使用 Async 和 Await 的异步编程(C#)

本篇的内容大部分来自于同事的邮件描述,本想自己用言简意赅的用语言转述,无奈语言水平有限,且同事的介绍也是极尽详细和明了,故不再画蛇添足,直接引述.... 通过使用异步编程,你可以避免性能瓶颈并增强应用程序的总体响应能力.但是,编写异步应用程序的传统技术可能比较复杂,使它们难以编写.调试和维护. Visual Studio 2012 引入了一个简化的方法,异步编程,在 .NET Framework 4.5 和 Windows 运行时利用异步支持. 编译器可执行开发人员曾进行的高难度工作,且应用程序

使用Async和Await进行异步编程(C#版 适用于VS2015) z

你可以使用异步编程来避免你的应用程序的性能瓶颈并且加强总体的响应.然而,用传统的技术来写异步应用是复杂的,同时编写,调试和维护都很困难. VS2012介绍了简单的方法,那就是异步编程,它在.Net Framework 4.5和Windows 运行时提供了异步支持.编译器做了开发者以前做的困难的工作,而且你的应用保持了类似于异步代码的逻辑结构.结果,你轻易地就获得了所有异步编程的优势. 异步提升响应 异步对于可能阻塞的活动是至关重要的.例如当你的应用访问Web的时候,访问web资源有时有点慢或者延

使用 Async 和 Await 的异步编程(C# 和 Visual Basic)[msdn.microsoft.com]

看到Microsoft官方一篇关于异步编程的文章,感觉挺好,不敢独享,分享给大家. 原文地址:https://msdn.microsoft.com/zh-cn/library/hh191443.aspx 通过使用异步编程,你可以避免性能瓶颈并增强应用程序的总体响应能力. 但是,编写异步应用程序的传统技术可能比较复杂,使它们难以编写.调试和维护. Visual Studio 2012 引入了一个简化的方法(即异步编程),该方法利用 .NET Framework 4.5 和 Windows 运行时中

ASP.NET WebForm中用async/await实现异步出人意料的简单

1. 在.aspx中添加异步标记 <%@ Page Language="C#" Async="true"%> 2. 在.aspx.cs或者.ascx.cs(用户控件)中添加异步方法 private async Task GetMyPosts() { var posts = await ServiceFactory.BlogPostSevice.GetBlogPostsPagedAsync(); rpPosts.DataSource = posts; rp

[.NET] 利用 async &amp; await 进行异步 IO 操作(整理中...)

利用 async & await 进行异步 IO 操作 可以使用异步函数访问文件.使用异步功能,可以调用异步方法,而不使用回调或拆分您在多个方法或 lambda 表达式中的代码. 若要使同步代码异步,则调用异步方法而不是一个同步方法并添加几个关键字到代码中. 您可能认为添加的以下原因 asynchrony 到文件访问调用: Asynchrony 建议于应用程序的响应能力更强.,因为是一个操作的 UI 线程可以执行其他工作. 如果 UI 线程必须执行需要很长时间的代码(例如,超过 50 毫秒),U