1.async的简单说明

  继版本4.5以前,要想实现异步方法,运用多线程齐头并进。而4.5直接一个async修饰的方法配合await实现异步,这里的底层实现原理暂时未研究,

应该本质都一样,对线程的操作。

2.async的简单示例

  注:async修饰的方法,返回值限定:void,Task,Task<T> 一般情况我们是不会去等待一个异步的处理结果

public class AsyncCalc
{

  static AsyncCalc _AsyncCalc = null;
  public static AsyncCalc Default {
  get {
    if (_AsyncCalc == null) _AsyncCalc = new AsyncCalc();
      return _AsyncCalc;
    }
  }

  public async void Add(int a, int b)
  {
    var c = await AddEx(a, b);
    Console.WriteLine("ADD:" + c);
  }

  /// <summary>
  /// 加法异步实现体
  /// </summary>
  /// <param name="a"></param>
  /// <param name="b"></param>
  /// <returns></returns>

  public Task<int> AddEx(int a, int b)
  {
    return Task.Run(() =>
    {
      int c = a + b;
      Thread.Sleep(2000);
      return c;
    });
  }
  public async void MUL(int a, int b)
  {
    var c= await MULEx(a,b);
    Console.WriteLine("MUL:" + c);
  }
  public Task<int> MULEx(int a ,int b) {
    return Task.Run(() => {
    var c = a * b;
    Thread.Sleep(1000);
    return c;
    });
  }

}

用控制台调用输出一下结果(这里的Sleep是模拟数据处理所需的时间,无实际作用)

static void Main(string[] args)
{

  int a = 10, b = 10;
  Console.WriteLine("程序开始!");
  AsyncCalc.Default.Add(a, b);
  AsyncCalc.Default.MUL(a, b);
  Console.WriteLine("程序完毕!");
  Thread.Sleep(3100);

}

Thread.Sleep(3100);是为了等待异步里面的输出,如果不等待的话将看不到结果

以上输出的结果:

这个结果+过程一目了然

这些方法比较散,可以汇总一下

/// <summary>
/// 异步执行方法 (简单封装,具体由项目而定)
/// </summary>
/// <param name="func"></param>
/// <param name="callback"></param>
public async void RunAsync(Action func)
{
  Func<Task> TaskQueue = () => {
    return Task.Run(() => {
      func();
    });
  };
  await TaskQueue();
}

.net Framework 4.5 新特性async(异步)的初步认识的更多相关文章

  1. 四、C# 5.0 新特性——Async和Await使异步编程更简单

    一.引言 .NET 4.5 的推出,对于C#又有了新特性的增加--就是C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作,下面就 ...

  2. 使用ES6新特性async await进行异步处理

    我们往往在项目中会遇到这样的业务需求,就是首先先进行一个ajax请求,然后再进行下一个ajax请求,而下一个请求需要使用上一个请求得到的数据,请求少了还好说,如果多了,就要一层一层的嵌套,就好像有点c ...

  3. 精进不休 .NET 4.5 (12) - ADO.NET Entity Framework 6.0 新特性, WCF Data Services 5.6 新特性

    [索引页][源码下载] 精进不休 .NET 4.5 (12) - ADO.NET Entity Framework 6.0 新特性, WCF Data Services 5.6 新特性 作者:weba ...

  4. .Net Framework 各个版本新特性总结 (一)

    .Net Framework 4.5 新特性 最近面试时又看到有问.Net Framework 新特性的问题,一时被问到了.平时也是拿起来就用,新版本出来了,新特性也就是瞄一眼,也没去仔细查看.这次干 ...

  5. NET Framework 4.5新特性 数据库的连接加密保护。

    NET Framework 4.5新特性 (一) 数据库的连接加密保护. NET Framework 4.5 ado.net数据库连接支持使用SecureString内存流方式保密文本.  一旦使用这 ...

  6. NET Framework 4.5新特性 (一) 数据库的连接加密保护。

    NET Framework 4.5 ado.net数据库连接支持使用SecureString内存流方式保密文本.  一旦使用这类操作,文本加密是私有不能共享的,并在不再需要时从计算机内存中删除.  S ...

  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. intent,实现两个活动之间数据的传递

    一.Intent 可以启动一个活动,也可以在启动活动的时候传递数据.intent中提供了putExtra()方法,它可以把我们想要传递的数据暂存在intent中,启动了另一个活动后,通过getInte ...

  2. C++—this指针的用法

    this指针抽象比喻 当我们在进入一个房子之后, 可以看见房子里的桌子,椅子. 地板等,但是看不到房子的全貌.对于一个类的实例来说, 你可以看到它的成员 函数. 成员 变量, 但是实例本身呢? thi ...

  3. ASP.NET脚本过滤-防止跨站脚本攻击(收集别人的)

    ASP.Net 1.1后引入了对提交表单自动检查是否存在XSS(跨站脚本攻击)的能力.当用户试图用<xxxx>之类的输入影响页面返回结果的时候,ASP.Net的引擎会引发一个 HttpRe ...

  4. Hibernate写配置文件无提示信息解决

    把Hibernate的相关jar包引入工程后,在配置hibernate.cfg.xml时没有提示信息,对于开发人员来说,那么多标签,标签有那么多属性,全部都记住显然是不可能的,遇到这种情况是很头疼的事 ...

  5. db2 sequence 查询

    1. 查询名字 select * from sysibm.sysequences where seqname='wx_Id' 2.nextVal select wx_seq_id.currval fr ...

  6. sql 两种分页offset和row_number简单分析

    新建临时表字段id,向临时表里插入1,2,3,4,5,6 if object_id('tempdb..#test') is not null drop table #test create table ...

  7. JS和Flash(AS)相互调用

    <!DOCTYPE html> <html> <head> <title>swf</title> <meta charset=&quo ...

  8. Servlet实现的三种方式

    实现Servlet的三种方式:一个实现,两个继承 /*========================================== * servlet的执行过程: * 1.创建servlet对 ...

  9. jQuery控制input不可编辑

    1.开启disabled,是input不可以编辑 $("#id").attr("disabled","disabled"); 2.关闭dis ...

  10. 使用 SLF4J + LogBack 构建日志系统(转)

    转载自:http://www.cnblogs.com/mailingfeng/p/3499436.html 上次我们讨论了如何选择一个好的开源日志系统方案,其中的结论是:使用 SLF4J + LogB ...