• C#中的异步多线程12 轮询


    在轮询模式中,原始线程发起了异步方法的调用,做一些其他处理,然后使用IAsyncResult对象的IsComplete属性来定期检查开启的线程是否完成。如果异步方法已经完成,原始线程就调用EndInvoke并继续。否则,做一些其他处理,然后过一会儿再检查。

    BeginInvoke返回一个IAsyncResult接口的引用(其内部是AsyncResult类的对象),AsyncResult类表现了异步方法的状态,其特性包括:

    1、当调用委托对象的BeginInvoke方法时,系统创建了一个AsyncResult对象,但它不返回对象的引用,而是返回对象中包含的IAsyncResult接口的引用。

    2、AsyncResult对象包含一个叫做AsyncDelegate的属性,它返回一个指向被调用来开启异步方法的委托的引用。但是,这个属性是类对象的一部分而不是接口的一部分。

    3、IsCompleted属性返回一个bool值,标识异步方法是否完成。

    4、AsyncState属性返回一个对象的引用,作为BeginInvoke方法调用时的state参数。它返回object类型的引用。

    示例:

            delegate long Mydel(int first, int seconde);
            static long Sum(int x,int y)
            {
                Console.WriteLine("Inside Sum");
                Thread.Sleep(100);
                return x + y;
            }
            static void Main(string[] args)
            {
                Mydel del = new Mydel(Sum);
                //发起并调用异步方法
                IAsyncResult iar = del.BeginInvoke(3, 5, null, null);
                Console.WriteLine("After BeginInvoke");
                //检查异步方法是否完成
                while(!iar.IsCompleted)
                {
                    Console.WriteLine("Not Done");
                    //继续处理
                    for (long i = 0; i < 1000000; i++) ;
                }
                Console.WriteLine("Done");
                //调用EndInvoke来获取接口并进行清理
                long result = del.EndInvoke(iar);
                Console.WriteLine("Result:{0}", result);
                Console.ReadLine();
            }
  • 相关阅读:
    C# 解析 json
    鸡汤一则
    jsp 环境配置记录
    jquery validate 自定义验证方法
    axure rp pro 7.0(页面原型工具)
    跨数据库服务器查询步骤
    .net 直接输出远程文件到浏览器和下载文件保存到本机
    URL中文乱码处理总结(转)
    使用ajax上传中遇到的问题
    Web 通信 之 长连接、长轮询(转)
  • 原文地址:https://www.cnblogs.com/NicolasLiaoran/p/12963427.html
Copyright © 2020-2023  润新知