描述:

我现在是轮询着构建实例,然后这个实例去执行一个方法,但是执行方法需要大约10s时间,全部轮询下来需要很长时间。所以我现在要更改,头给了我两个方法,1多线程 2异步委托回调函数。

异步委托回调函数:

C# 委托的三种调用示例(同步调用 异步调用 异步回调)

同步调用:Invoke方法用来进行同步调用,它将阻塞当前线程,然后执行调用,调用完毕后再继续向下进行。

    AddHandler handler = new AddHandler(加法类.Add);
               int result = handler.Invoke(1, 2);

异步调用:不阻塞线程,把调用塞到线程池中,程序主线程或UI线程可以继续执行。委托的异步调用通过BeginInvoke和EndInvoke来实现。()

异步回调:用回调函数,当调用结束时会自动调用回调函数,解决了为等待调用结果,而让线程依旧被阻塞的局面

C#线程:BeginInvoke和EndInvoke方法

http://developer.51cto.com/art/200908/141587.htm

使用IAsyncResult asyncResult属性来判断异步调用是否完成

直接使用EndInvoke方法来获得返回值

使用WaitOne方法等待异步方法执行完成

上面介绍的几种方法实际上只相当于一种方法。这些方法虽然可以成功返回结果,也可以给用户一些提示,但在这个过程中,整个程序就象死了一样(如果读者在GUI程序中使用这些方法就会非常明显),要想在调用的过程中,程序仍然可以正常做其它的工作,就必须使用异步调用的方式

所以想invoke而主界面不卡则只能使用异步回调方法.

有关于并行处理的AsParallel方法

AsParallel,异步回调委托本质都是多线程。区别就是有没有线程池

new List<int>().AsParallel().ForAll(a=>操作)

总结:

IAsyncResult asyncResult属性来判断异步调用是否完成

EndInvoke方法来获得返回值

WaitOne方法等待异步方法执行完成

AsParallel,异步回调委托本质都是多线程。区别就是有没有线程池,AsParallel会充分利用多核CPU来实现真正意义上的并行处理

异步回调方法,界面不卡

GetTypeCompletedToCreatInstance 定义的AsyncCallback类型回调方法,参数全在IAsyncResult类型asyncResult里,可以自定义一个类,将你想要传给这个回调方法的参数全部写在这个类里,然后再(SingNetDevice)用括号前传该类,该类需要有委托类的属性才能获取委托的的值(endinvoke)

6.26学习 异步委托回调函数 VS 多线程 VS 并行处理的更多相关文章

  1. C# 异步委托回调函数使用

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  2. C#跨窗体调用控件(委托回调函数使用例子)

    问题: 有两个窗体,FORM1(含一个label控件,一个名为显示form2的button控件)和FORM2(含一个button控件).启动时,FORM1中点击button控件显示form2使FORM ...

  3. python 并发编程 同步调用和异步调用 回调函数

    提交任务的两张方式: 1.同步调用 2.异步调用 同步调用:提交完任务后,就在原地等待任务执行完后,拿到结果,再执行下一行代码 同步调用,导致程序串行执行 from concurrent.future ...

  4. 十四、Android学习笔记_Android回调函数触发的几种方式 广播 静态对象

    一.通过广播方式: 1.比如登录.假如下面这个方法是外界调用的,那么怎样在LoginActivity里面执行登录操作,成功之后在回调listener接口呢?如果是平常的类,可以通过构造函数将监听类对象 ...

  5. Android学习笔记_74_Android回调函数触发的几种方式 广播 静态对象

    一.通过广播方式: 1.比如登录.假如下面这个方法是外界调用的,那么怎样在LoginActivity里面执行登录操作,成功之后在回调listener接口呢?如果是平常的类,可以通过构造函数将监听类对象 ...

  6. 异步编程(回调函数,promise)

    一.回调函数 ①概念:一般情况下,程序会时常通过API调用库里所预先备好的函数.但是有些库函数却要求应用先传给它一个函数,好在合适的时候调用,以完成目标任务.这个被传入的.后又被调用的函数就称为回调函 ...

  7. C# Invoke 使用 异步委托

    如果使用多线程,应该会遇到这样的一个问题,在子线程中想调用主线程中(Form1)控件,提示报错! 可以使用Invoke方法调用. this.Invoke(new MethodInvoker(() =& ...

  8. c#并行任务多种优化方案分享(异步委托)

    遇到一个多线程任务优化的问题,现在解决了,分享如下. 假设有四个任务: 任务1:登陆验证(CheckUser) 任务2:验证成功后从Web服务获取数据(GetDataFromWeb) 任务3:验证成功 ...

  9. ArcGIS API for JavaScript 4.2学习笔记[7] 鹰眼(缩略图的实现及异步处理、Promise、回调函数、监听的笔记)

    文前说明:关于style就是页面的css暂时不做评论,因为官方给的例子的样式实在太简单了,照抄阅读即可. 这篇文章有着大量AJS 4.x版本添加的内容,如监听watch.Promise对象.回调函数. ...

随机推荐

  1. webpack打包编译时,不识别src目录以外的js或css

    前端的dva项目开发时,遇到个很郁闷的问题,用es6的语法简单的export一个变量出来,在其他js中import使用,结果就报错了.   export写法如下: const enUS = { acc ...

  2. php 设计模式之策略模式

    策略模式:定义算法,并将其封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 步骤:1.抽象策略角色:定义接口或抽象类 2.具体策略角色:实现该接口(抽象类),即具体的算法实现 ...

  3. opencc 繁体简体互转 (C++示例)

         繁体字通常采用BIG5编码,简体字通常采用GBK或者GB18030编码,这种情况下,直接使用iconv(linux下有对应的命令,也有对应的C API供编程调用)就行.对于默认采用utf-8 ...

  4. 准备 overlay 网络实验环境 - 每天5分钟玩转 Docker 容器技术(49)

    为支持容器跨主机通信,Docker 提供了 overlay driver,使用户可以创建基于 VxLAN 的 overlay 网络.VxLAN 可将二层数据封装到 UDP 进行传输,VxLAN 提供与 ...

  5. NOIP 2001 提高组 题解

    NOIP 2001 提高组 题解 No 1. 一元三次方程求解 https://vijos.org/p/1116 看见有人认真推导了求解公式,然后猥琐暴力过的同学们在一边偷笑~~~ 数据小 暴力枚举即 ...

  6. 福利 c++ 标准头文件大全

    #include<cmath> #include<math.h> #include<ctype.h> #include<algorithm> #incl ...

  7. Python初学基础

      初入坑Python,打算跟着沫凡小哥的学习视频打个基础,此篇文章做一些简单的学习记录,加油加油加油啦 沫凡小哥的学习网站:https://morvanzhou.github.io/tutorial ...

  8. HTTP请求中的Form Data与Request Payload的区别

    前端开发中经常会用到AJAX发送异步请求,对于POST类型的请求会附带请求数据.而常用的两种传参方式为:Form Data 和 Request Payload. GET请求 使用get请求时,参数会以 ...

  9. akoj-1162-计算表达式

    计算表达式 Time Limit:1000MS  Memory Limit:65536K Total Submit:14 Accepted:7 Description 对于一个不存在括号的表达式进行计 ...

  10. Unicode、UTF-8 和 ISO8859-1到底有什么区别

    说明:本文转载于新浪博客,旨在方便知识总结.原文地址:http://blog.sina.com.cn/s/blog_673c81990100t1lc.html 本文主要包括以下几个方面:编码基本知识, ...