zoukankan      html  css  js  c++  java
  • C# 并行编程之异步委托

    异步委托的执行是在辅助线程中进行的,所以异步委托也是多线程的一种技术

    首先定义一个委托

    public delegate void mydelgate ();

    这是最简单一个委托类型,没有返回值,也没有参数,定义一个方法

    private void Method()
            {
                Console.WriteLine ("thread is running,thread Id is: {0}",Thread.CurrentThread.ManagedThreadId);
            }

    定义一个委托对象

    mydelgate del = Method;//new mydelgate (Method);

    委托对象可以用上面任意两种方法实例化,下面的代码就关键了

    del.BeginInvoke (null,"del")

    每个委托类型都会有两个方法BeginInvoke和EndEnvoke,分别表示开始调用,和结束调用,该方法,会将委托的调用至于
    新线程中,以起到异步,不阻塞主线程的作用,上面的两个参数,第一个为AsyncCallBack类型,表示异步委托调用结束后

    调用什么该方法,这里我们不需要在委托结束后调用任何方法,所以设为null,第二个参数是 object类型的参数,作为额外

    参数,传入异步委托中,可以是任何值,一般用来标识委托,该方法还返回一个IAsyncResult对象.

    如果定义一个带参数的委托

    public delegate void mydelgate2(int a,int b);

    调用的时候就需要这样调用

    del.BegingInvoke(a,b,null,"dell")

    最前面的两个参数就是该委托需要传入的参数,顺序和声明是一致的

    对于有返回值的委托,如

    public delegate int AddDelegate(int a,int b)

    我们如果需要取回返回值,就需要这样,假设有一个该委托的实例add

    IAsyncResult asyncResult= add.BeginInvoke(2,3,null"add");
    int result = add.EngEnvoke(asyncResult);

    注意一旦调用EndEnvoke方法,就会进入阻塞模式,等待委托执行完毕,当然如果委托已经执行完毕,就可以立马取得结果,
    这里EndEnvoke必须接受一个IAsyncResult对象。

  • 相关阅读:
    正则表达式
    什么是面向对象
    关于jdk,jre,jvm和eclipse的一些总结
    分析ajax爬取今日头条街拍美图
    pycharm误删恢复方法及python扩展包下载地址
    django 之 视图层、模板层
    django
    django框架基础二
    jdango框架基础一
    安装软件,提高速度,可以使用清华源
  • 原文地址:https://www.cnblogs.com/yayaxxww/p/3547960.html
Copyright © 2011-2022 走看看