zoukankan      html  css  js  c++  java
  • AsyncResult

    private static long CalculateFolderSize(string FolderName){ return FolderName.Length;}
    public delegate long CalculateFolderSizeDelegate(string FolderName);
    static void Main(string[] args)
    {
    CalculateFolderSizeDelegate d = CalculateFolderSize;
    Console.WriteLine("请输入文件夹名称(例如:C:\Windows):");
    string FolderName = Console.ReadLine();
    //通过异步调用静态方法CalculateFolderSize
    IAsyncResult ret = d.BeginInvoke(FolderName ,null,null);
    /*BeginInvoke
    第一个参数是定义委托时确定的方法签名镇南关的参数列表,
    * 第二个参数是当异步调用结束时自动回调的方法,
    * 第三个参数是用向第二个参数所确定的回调方法提供的额外信息,比如要回到的方法有参数,则可填充这些参数
    */
    Console.WriteLine("正在计算中,请耐心等待.........");
    //阻塞,等到调用完成,取出结果
    long size = d.EndInvoke(ret );
    /*EndInvoke
    * 负责生成一个IAsyncResult接口类型的对象并填充其字段
    * 该方法不断查询异步调用的方法是否执行完毕,根据委托类型的定义,该方法知道被异步调用的方法所有参数,所以当
    * 该方法发现异步调用完成时,它取出异步调用方法执行的结果作为其返回值,如果异步调用方法有声明ref和out的参数,它也负责填充它,
    * 正由该方法有一个不断轮询的过程,所以主线程程序在执行到调用该方法时会暂停,等待异步调用方法完成,取回结果再继续执行
    */

    Console.WriteLine(" 计算完成。文件夹{0}的容量为:{1}字节 ",FolderName,size );

    /*
    long Size;
    string FolderName;
    Console.WriteLine("请输入文件夹名称(例如:C:\Windows):");
    FolderName = Console.ReadLine();
    Size = CalculateFolderSize(FolderName);//不反回之前就无法继续往下执行
    Console.WriteLine(" 文件夹{0}的容量为:{1}字节 ",FolderName ,Size);
    * */
    Console .ReadLine();
    }

    }

  • 相关阅读:
    子串周期查询问题的相关算法及其应用(原文为2019年国家集训队论文集)
    微软最有价值专家 Azure DevOps MVP(第六年)
    当一个程序员一天被打扰 10 次, 后果很惊人
    什么是CAP定理?
    Java中的锁原理、锁优化、CAS、AQS详解
    如何停止一个正在运行的线程?
    lammps总结(7.27-7.30)
    packmol建模
    Linux 命令 (1)
    ElementUI中的el-select中多选回显数据后没法重新选择和更改
  • 原文地址:https://www.cnblogs.com/sumg/p/3742659.html
Copyright © 2011-2022 走看看