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对象。

  • 相关阅读:
    正则表达式(转)
    Java实现的具有GUI的校园导航系统
    由“哥尼斯堡的‘七桥问题’”引出的并查集问题
    Is It A Red-Black Tree?(判断一棵树是否为红黑二叉树)
    Java IO
    Android ORMLite的使用
    Android SQLite数据库的数据升级与降级
    Android SQLite数据库 SQLiteOpenHelper的操作使用
    SimpleAdapter与baseAdapter的使用语法与区别
    Android五大布局之一绝对布局(AbsoluteLayout)
  • 原文地址:https://www.cnblogs.com/yayaxxww/p/3547960.html
Copyright © 2011-2022 走看看