• 6.26学习 异步委托回调函数 VS 多线程 VS 并行处理


    描述:

    我现在是轮询着构建实例,然后这个实例去执行一个方法,但是执行方法需要大约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)

  • 相关阅读:
    Spring
    linux下jdk多版本管理
    linux集群管理
    python多任务处理
    Web框架的引入
    Git命令大全
    Git远程仓库--GitHub
    基于python实现简单web服务器
    python文件读写方式
    几句话搞懂URI、URL、URN之间的关系
  • 原文地址:https://www.cnblogs.com/swobble/p/7079818.html
Copyright © 2020-2023  润新知