异步编程前提

1.学委托 delegate

其中委托中的beginInvoke()和endInvoke()方法必须要会。

2.学习回调函数

(也可以不用,但是一般建议用回调函数中执行endinvoke()方法)

回调函数也是一个方法, 只不过是把这个方法作为参数传递到另一个以回调函数作为参数的方法中,

当这个方法执行完之后,就会自动执行这个回调函数方法。
注意
1必须是主方法必须要有回调函数作为参数 
2没有返回类型

异步编程适用范围

1.异步编程是建立在委托基础上的
2.异步调用的每一个方法都是在独立的线程中执行的,因此可以说一个简化的多线程
3.比较适用在后台运行比较耗时的 简单任务,并且任务之间是独立的,不能直接访问可视化控件。
4.如果后台任务按照特定顺序执行或者共享特定资源,不太适合异步,建议直接使用多线程编程

 异步编程步骤

1.定义一个委托
代码:
public delegate int MyDelegate(int i)
2.根据委托定义实现方法 可以是多个
代码:
private int MyExectue1(int i)
{
return i=i+1;
}
private int MyExectue2(int i)
{
return i*i;
}
3.实例化委托,并绑定方法
代码:
MyDelegate mydel=MyExectue1; //这里不需要变量列表
4.开始执行委托,并将委托状态复制给 一个委托状态接口(IAsyncResult)
代码:
IAsyncResult asyncres=mydel.beginInvoke(10);
5.开始其他不费时的任务
6.使用委托的endInvoke()方法得到异步操作结果
int result=mydel.endInvoke(asyncres,MyCallback,回调函数所用方法);

7.定义回调函数

private void MyCallback(IAsyncResult result)
{
int res = mydel.EndInvoke(result);
Console.WriteLine("第{0}个计算结果是:{1}", result.AsyncState.ToString(), res);
}

c# 异步编程总结的更多相关文章

  1. C#异步编程(一)

    异步编程简介 前言 本人学习.Net两年有余,是第一次写博客,虽然写的很认真,当毕竟是第一次,肯定会有很多不足之处, 希望大家照顾照顾新人,有错误之处可以指出来,我会虚心接受的. 何谓异步 与同步相对 ...

  2. C#与C++的发展历程第三 - C#5.0异步编程巅峰

    系列文章目录 1. C#与C++的发展历程第一 - 由C#3.0起 2. C#与C++的发展历程第二 - C#4.0再接再厉 3. C#与C++的发展历程第三 - C#5.0异步编程的巅峰 C#5.0 ...

  3. 关于如何提高Web服务端并发效率的异步编程技术

    最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...

  4. 异步编程 In .NET

    概述 在之前写的一篇关于async和await的前世今生的文章之后,大家似乎在async和await提高网站处理能力方面还有一些疑问,博客园本身也做了不少的尝试.今天我们再来回答一下这个问题,同时我们 ...

  5. C#异步编程(二)

    async和await结构 序 前篇博客异步编程系列(一) 已经介绍了何谓异步编程,这篇主要介绍怎么实现异步编程,主要通过C#5.0引入的async/await来实现. BeginInvoke和End ...

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

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

  7. [.NET] 怎样使用 async & await 一步步将同步代码转换为异步编程

    怎样使用 async & await 一步步将同步代码转换为异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6079707.html  ...

  8. [C#] 走进异步编程的世界 - 开始接触 async/await

    走进异步编程的世界 - 开始接触 async/await 序 这是学习异步编程的入门篇. 涉及 C# 5.0 引入的 async/await,但在控制台输出示例时经常会采用 C# 6.0 的 $&qu ...

  9. C#异步编程

    什么是异步编程 什么是异步编程呢?举个简单的例子: using System.Net.Http; using System.Threading.Tasks; using static System.C ...

  10. 深入解析js异步编程利器Generator

    我们在编写Nodejs程序时,经常会用到回调函数,在一个操作执行完成之后对返回的数据进行处理,我简单的理解它为异步编程. 如果操作很多,那么回调的嵌套就会必不可少,那么如果操作非常多,那么回调的嵌套就 ...

随机推荐

  1. 个人第4次作业:Alpha测试

    这个作业属于哪个课程 课程 这个作业要求在哪里 作业要求 团队名称 CTRL-IKun 一.测试人员个人信息 姓名 王川 学号 201731021132 所在团队 CTRL-IKun 二.测试情况及结 ...

  2. Mybatis基础(二)

    Mybatis连接池 Mybatis连接池提供了三种配置方式,配置的位置在SqlMapConfig.xml的dataSource标签中,其type属性就是配置连接池的种类.type的可取值 1.POO ...

  3. 2020 University Rankings US News(亚洲)

    2020 University Rankings US News(亚洲)

  4. 024.Python模块OS模块

    一 OS模块 对系统进行操作 1.1 popen 可以把运行的结果,这个字符串转化成utf-8这样的编码格式在进行输出 import os res = os.popen("ifconfig& ...

  5. 死磕java(2)

    java数据类型 boolean --true--false byte --8位 short --16位 int --32位 long --64位 char float --32位 double -- ...

  6. LUAMD5加密

    md5里的方法: C:\Windows\System32>lua Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio > require( ...

  7. 深入理解计算机系统大作业——程序人生P2P

    程序人生P2P 前言 经过一个学期的快乐学习(折磨),计算机系统终于结课了,自认为对于计算机系统算是有了粗浅的理解.为了庆祝结课,顺带总结自己的学习经历(只是为了完成大作业),便通过一个简单的程序he ...

  8. HDU_2446_打表

    http://acm.hdu.edu.cn/showproblem.php?pid=2446 打表,二分查找,注意查找最后的判断. #include<cstdio> #define N 2 ...

  9. WeChall_Training: Encodings I (Training, Encoding)

    We intercepted this message from one challenger to another, maybe you can find out what they were ta ...

  10. EMC networker nmm can restore and recover sqlserver as different name to different location

    EMC networker nmm can restore and recover sqlserver as different name to different location That is ...