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

  • 相关阅读:
    阿里云如何跨账号打通,多账号同时享受优惠
    阿里云超长6个月免费套餐汇总
    零门槛申请阿里云1万元代金券
    阿里云包年包月服务器如何退款
    用户名密码注册与登录的应用
    Android 沉浸式状态栏完美解决方案
    Android开发支付集成——微信集成
    Android开发支付集成——支付宝集成
    ExpandableListView的完美实现,JSON数据源,右边自定义图片
    android扫描网页二维码进行网页登录
  • 原文地址:https://www.cnblogs.com/yayaxxww/p/3547960.html
Copyright © 2011-2022 走看看