1.c#的异步实现,之前代码编写大都开几个线程。

现可以使用“async+await”方式实现异步(具体不详细介绍,暂且止在会用,仅仅是c#更新史上一个工具):

  1. static void Main(string[] args)
  2. {
  3. method1();
  4. method2();//不会等待method1执行结束,再执行method2
  5. Console.ReadKey();
  6. }//结果输出是"method 1"和"method 2"字符串交替出现,但不会严格按照1:1交替出现
  7.  
  8. private static async Task method1()//必须使用task或task<T>做返回
  9. {
  10. await Task.Run(() =>
  11. {
  12. for (int i = 0; i < 100; i++)
  13. {
  14. Console.WriteLine("method 1");
  15. }
  16. });
  17.  
  18. }
  19.  
  20. private static void method2()
  21. {
  22. for (int i = 0; i < 25; i++)
  23. {
  24. Console.WriteLine("method 2");
  25. }
  26. }

  2.委托函数

  旧的使用方法:需要先定义委托类型,然后定义一个符合委托类型签名的函数,
在调用前,需声明并创建委托对象,将指定函数与委托进行关联。

  1. public delegate int Math(int param1,int param2);定义委托类型
  2. Public int Add(int param1,int param2)//定义同签名函数
  3. {
  4.   Return param1+param2;
  5. }
  6. Math math;//声明委托
  7. math=new Math(Add);创建委托对象,与指定进行关联
  8. math(3,4);//调用委托函数

  现在可以使用内置委托类型:

  1. Func<int,int,int> math=Add;//指定委托对象并关联函数
  2. math(3,4);//调用委托函数

  Action委托具有Action<T>、Action<T1,T2>、Action<T1,T2,T3>……Action<T1,……T16>多达16个的重载,其中传入参数均采用泛型中的类型参数T,涵盖了几乎所有可能存在的无返回值的委托类型。Func则具有Func<TResult>、Func<T,Tresult>、Func<T1,T2,T3……,Tresult>17种类型重载,T1……T16为出入参数,Tresult为返回类型。

既然是委托类型,也同样可以与匿名函数、或者采用Lambda表达式结合使用:

  1. 匿名函数:
  2. Func<int,int,int> math=delegate(int param1,int param2)
  3. {
  4.   Return param1+param2;
  5. }
  6. Lambda
  7. Func<int,int,int> math=(param1,param2)=>
  8. {
  9.   Return param1+param2;
  10. }

  Action的使用如同上面Func的使用一样,只是缺少了返回类型,直接调用委托函数。

  1. Public void Add(int param1,int param2)
  2. {
  3.   MessageBox.show((param1+param2).ToString());
  4. }
  5. //遇到此类的委托函数调用,那我们就可以直接用Action了:
  6. Action<int,int> math=Add;
  7. math(3,4);

c# async,await, 委托函数的更多相关文章

  1. C# Async/Await异步函数原理

    原理 与同步函数相比,CLR在执行异步函数时有几个不同的特点: 1.        并非一次完成,而且分多次完成 2.        并非由同一个线程完成,而是线程池每次动态分配一个线程来处理: 结合 ...

  2. 一种通过async/await实现函数同步执行的方式

    const testArr = [ () => { return new Promise((resolve, reject) => { setTimeout(()=> { alert ...

  3. 异步函数async await在wpf都做了什么?

    首先我们来看一段控制台应用代码: class Program { static async Task Main(string[] args) { System.Console.WriteLine($& ...

  4. 浅谈C#中的 async await 以及对线程相关知识的复习

    C#5.0以后新增了一个语法糖,那就是异步方法async await,之前对线程,进程方面的知识有过较为深入的学习,大概知道这个概念,我的项目中实际用到C#异步编程的场景比较少,就算要用到一般也感觉T ...

  5. 温故知新,CSharp遇见异步编程(Async/Await),聊聊异步编程最佳做法

    什么是异步编程(Async/Await) Async/Await本质上是通过编译器实现的语法糖,它让我们能够轻松的写出简洁.易懂.易维护的异步代码. Async/Await是C# 5引入的关键字,用以 ...

  6. 彻底搞懂 C# 的 async/await

    前言 Talk is cheap, Show you the code first! private void button1_Click(object sender, EventArgs e) { ...

  7. 现代JS中的流程控制:详解Callbacks 、Promises 、Async/Await

    JavaScript经常声称是_异步_.那是什么意思?它如何影响发展?近年来这种方法有何变化? 请思考以下代码: result1 = doSomething1(); result2 = doSomet ...

  8. C# 彻底搞懂async/await

    前言 Talk is cheap, Show you the code first! private void button1_Click(object sender, EventArgs e) { ...

  9. 理解Task和和async await

    本文将详解C#类当中的Task,以及异步函数async await和Task的关系 一.Task的前世今生 1.Thread 一开始我们需要创建线程的时候一般是通过Thread创建线程,一般常用创建线 ...

随机推荐

  1. renren-fast后端源码参考-配置和对应工具

    1. renren-fast后端源码参考-配置和对应工具 1.1. 前言 renren-fast是个开源的前后端分离快速开放平台,没有自己框架的同学可以直接使用它的,而我打算浏览一遍它的代码,提取一些 ...

  2. 老生常谈之js深拷贝与浅拷贝

    前言 经常会在一些网站或博客看到"深克隆","浅克隆"这两个名词,其实这个很好理解,今天我们就在这里分析一下js深拷贝和浅拷贝. 浅拷贝 我们先以一个例子来说明 ...

  3. GitHub Python项目推荐|瓦力Devops开源项目代码部署平台持续部署

    GitHub Python项目推荐|walle - 瓦力 Devops开源项目代码部署平台 项目热度 标星(star):8418 (很不错的实用项目,大神作品,建议关注) 标星趋势 关注(watch) ...

  4. redis-启用命令

    一.redis后端启动: 1.将redis源码包中的redis.conf配置文件复制到redis/bin/下 # cd /root/redis-3.0.0 # cp redis.conf /usr/l ...

  5. selenium.获取浏览器大小、设置浏览器位置、最大化浏览器

    此篇博客学习控制浏览器的api,分别有: get_window_size() 获取浏览器大小 set_window_size() 设置浏览器位置 get_window_position() 获取浏览器 ...

  6. MongoDB(NoSQL) 非关系型数据库

    目录 简单了解 mongoDB 简单使用mongoDB 简单了解 mongoDB # NoSQL 泛指非关系型的数据库 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅 ...

  7. Qt编译报错:The kit Desktop Qt...has configuration issues which might be the root cause for this problem.

    报错:Cannot find file: E:\实验室\20180409_Qt跑马灯\QtTest\QtTest.pro. 17:03:11: 进程"D:\Qt\Qt5.8.0\5.8\ms ...

  8. (十二)Kubernetes 认证、授权与准入控制

    访问控制概述 API Server作为Kubernetes集群系统的网关,是访问和管理资源对象的唯一入口:包括kube-controller-manager.kube-scheduler.kubele ...

  9. Shell脚本监控Linux某个后台进程,当进程死掉后重新启动服务,以httpd为例

    Shell脚本如下: vim monitor.sh #!/bin/bash while true # 无限循环 flag=`ps -aux |grep "httpd" |grep ...

  10. POJ 3322 Bloxorz

    #include<cstring> #include<algorithm> #include<iostream> #include<cstdio> #i ...