.net Framework 4.5 新特性async(异步)的初步认识

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();
}

时间: 2024-10-06 14:07:39

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

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

.Net Framework 4.5 新特性 最近面试时又看到有问.Net Framework 新特性的问题,一时被问到了.平时也是拿起来就用,新版本出来了,新特性也就是瞄一眼,也没去仔细查看.这次干脆花点时间总(翻)结(译)一下各个版本相比上一版本带来的新特性.主要参考来源是MSDN,一下是原文链接: Reference: https://msdn.microsoft.com/en-us/library/ms171868(v=vs.110).aspx#core 嗯,我们就从4.5开始. 目录

NET Framework 4.5新特性 (三)64位平台支持大于2 GB大小的数组

64位平台.NET Framework数组限制不能超过2GB大小.这种限制对于需要使用到大型矩阵和向量计算的工作人员来说,是一个非常大问题. 无论RAM容量有多大有多少,一旦你使用大型矩阵和向量计算工作的时候,经常会抛出一个System.OutOfMemoryException异常,如下图所示: 参考程序 class Program { private static void Main(string[] args) { int arrysize = 150000000; var large=ne

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

NET Framework 4.5 ado.net数据库连接支持使用SecureString内存流方式保密文本.  一旦使用这类操作,文本加密是私有不能共享的,并在不再需要时从计算机内存中删除.  SecureString此类不能被继承. 下面做了一些演示 private void Login_Click(object sender, EventArgs e) { //登录参数 string userName = Username.Text; SecureString password = se

NET Framework 4.5新特性 (二) 控制台支持 Unicode (UTF-16) 编码

从 .NET Framework 4.5 开始,Console 类支持与 UnicodeEncoding 类的 UTF-16 编码.  显示 Unicode 字符到控制台,你可以设置 OutputEncoding 属性为 UTF8Encoding 或 UnicodeEncoding. 下面的示例显示 Unicode 字符的范围到控制台中.  该示例接受三个命令行参数:显示范围的开头,显示范围的末尾,以及是否使用当前控制台编码 (false) 或 UTF-16 编码 (true).  假定控制台使

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

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

Dubbo 2.7新特性之异步化改造

这是why技术的第1篇原创文章 我与Dubbo的二三事 我是2016年毕业的,在我毕业之前,我在学校里面学到的框架都是SSH,即struts+spring+hibernate,是的你没有看错,在大学里面的课本里面学的是strusts,这个还没毕业就被基本抛弃的框架.然而我大四出去实习,用的技术是SSM,即Spring,SpringMVC,Mybatis.实习的时候做的项目都是外包项目,非常传统的单体大项目,和学校里面做课程设计一样,所有的功能包括前后端都糅合在一个项目里面,根本不知道什么是分布式

.NET4.5新特性async和await修饰符实现异步编程

开篇 每一个版本的.net都会引入一些新的特性,这些特性方便开发人员能够快速实现一些功能.虽然.net版本一直在更新,但是新版本对旧版本的程序都是兼容的,在这一点上微软做的还是非常好的.每次学一个新内容,第一次接触的方法在脑海里占的位置还是比较重要的,从刚开始接触.net的多线程编程是使用Thread类,然后后面写的程序只要用到异步或者多线程就马上会想到用Thread,虽然知道委托的异步调用也能够实现,但是脑海里面的排在前面还是Thread类,在那个时候不知道他们之间的区别和优劣,也就不懂得如何

.NET4.5新特性之异步编程(Async和Await)的使用

一.简介 首先来看看.net的发展中的各个阶段的特性:NET 与C# 的每个版本发布都是有一个"主题".即:C#1.0托管代码→C#2.0泛型→C#3.0LINQ→C#4.0动态语言→C#4.5异步编程 所谓的异步编程是利用CPU空闲时间和多核的特性,它所返回的Task或Task是对await的一个承诺,当任务执行完毕后返回一个结果给接收者.这里看到这个可能各位不太明白,不要紧,下面会有讲解. 二.使用说明 方法签名包含一个 Async 或 async 修饰符. 按照约定,异步方法的名

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

http://www.cnblogs.com/zhili/archive/2013/05/15/csharp5asyncandawait.html http://blog.zhaojie.me/2012/04/exception-handling-in-csharp-async-await-2.html https://msdn.microsoft.com/zh-cn/library/hh191443.aspx