zoukankan      html  css  js  c++  java
  • 异步委托

    异步委托的简单方式

     #region 异步委托 简单的方式
                Func<int, int, string> delFunc = (a, b) =>
                {
                    Console.WriteLine("Delegate Thread:" + Thread.CurrentThread.ManagedThreadId);
                    return (a+b).ToString();
                };
                //拿到异步委托的结果
                IAsyncResult result = delFunc.BeginInvoke(3, 4, null, null);
                string str = delFunc.EndInvoke(result);//EndInvoke方法会阻塞当前线程,直到异步委托指向完成之后才往下执行
                Console.WriteLine(str);
                Console.ReadKey();
    
                #endregion


    有回调函数的异步委托

     #region 有回调函数的异步委托
                //先写一个有返回值的委托实例
                Func<int, int, string> delFunc = (a, b) =>
                {
                  
                    return (a + b).ToString();
                };
                delFunc.BeginInvoke(5, 6, MyAsyncCallback, "123");//在下面生成MyAsyncCallback()方法
                Console.ReadKey();
               
    
            }
    
            public static void MyAsyncCallback(IAsyncResult ar)
            {
                //拿到异步委托的结果
                AsyncResult result = (AsyncResult)ar;//强转成子类的类型
                var del = (Func<int,int,string>)result.AsyncDelegate;//result.AsyncDelegate直接指向了委托实例delFunc
                string returnValue= del.EndInvoke(result);
                Console.WriteLine("返回值是" + returnValue);
    
                //拿到回调函数的参数
                Console.WriteLine("回调函数的线程ID是:" + Thread.CurrentThread.ManagedThreadId);
                Console.WriteLine("回调函数的参数是:"+result.AsyncState);
            }
            #endregion

    有回调函数的异步委托的另一种方法是 直接在回调函数中将委托作为参数

    //另一种方法
            Func<int, int, string> delFunc = (a, b) =>
            {
    
                return (a + b).ToString();
            };
            delFunc.BeginInvoke(5, 6, MyAsyncCallback,delFunc );//在下面生成MyAsyncCallback()方法,直接将委托作为参数
                Console.ReadKey();
               
    
            }
    
            private static void MyAsyncCallback(IAsyncResult ar)
            {
                var del = (Func<int,int,string>)ar.AsyncState;
                string str = del.EndInvoke(ar);
            }
  • 相关阅读:
    717. 1比特与2比特字符
    697. 数组的度
    674. 最长连续递增序列
    665. 非递减数列
    661. 图片平滑器
    643. 子数组最大平均数 I
    plink计算两个SNP位点的连锁不平衡值(LD)
    GWAS群体分层校正,该选用多少个PCA
    PyCharm的安装和应用
    GWAS后续分析:多基因风险评分(Polygenic Risk Score)的计算
  • 原文地址:https://www.cnblogs.com/xiaoyaohan/p/9755672.html
Copyright © 2011-2022 走看看