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

    using System;
    using System.Text;
    using System.Collections.Generic;
    using System.Threading;
    namespace Test
    {
        class Program
        {
            static int TakesAWhile(int data, int ms)
            {
                Console.WriteLine("TakesAWhile started");
                Thread.Sleep(ms);
                Console.WriteLine("TakesAWhile completed");
                return ++data;
            }
            //定义一个委托
            public delegate int TakesAWhileDelegate(int data, int ms);
            static void Main()
            {
                TakesAWhileDelegate d1 = TakesAWhile;//声明一个委托
                //BeginInvoke可以返回委托的相关信息,第三个参数null可以
                //是某个函数,意味着调用完成后所执行的函数
                //其实在这里委托的功能类似于线程
                IAsyncResult ar = d1.BeginInvoke(1, 3000, null, null);
                while (!ar.IsCompleted)//判断委托是否完成任务
                {
                    Console.Write(".");
                    Thread.Sleep(50);
                }
                int result = d1.EndInvoke(ar);
                //返回委托所执行的结果
                Console.WriteLine("result:{0}", result);
            }
        }
    }
    等待句柄
    static void Main()
            {
                TakesAWhileDelegate d1 = TakesAWhile;//声明一个委托
                //BeginInvoke可以返回委托的相关信息,第三个参数null可以
                //是某个函数,意味着调用完成后所执行的函数
                //其实在这里委托的功能类似于线程
                IAsyncResult ar = d1.BeginInvoke(1, 3000, null, null);
                while (true)
                {
                    Console.Write(".");
                    //等待句柄,如果50毫秒内没有完成则返回false
                    if (ar.AsyncWaitHandle.WaitOne(50, false))
                    {
                        Console.WriteLine("Can get the result now");
                        break;
                    }
                }
                int result = d1.EndInvoke(ar);
                //返回委托所执行的结果
                Console.WriteLine("result:{0}", result);
            }

    using System;
    using System.Text;
    using System.Collections.Generic;
    using System.Threading;
    namespace Test
    {
        class Program
        {
            static int TakesAWhile(int data, int ms)
            {
                Console.WriteLine("TakesAWhile started");
                Thread.Sleep(ms);
                Console.WriteLine("TakesAWhile completed");
                return ++data;
            }
            static void TakesAWhileCompleted(IAsyncResult ar)
            {
                if (ar == null) throw new ArgumentNullException("ar");
                TakesAWhileDelegate d1 = ar.AsyncState as TakesAWhileDelegate;
                int result = d1.EndInvoke(ar);
                //返回委托所执行的结果
                Console.WriteLine("result:{0}", result);
            }
            //定义一个委托
            public delegate int TakesAWhileDelegate(int data, int ms);
            static void Main()
            {
                TakesAWhileDelegate d1 = TakesAWhile;//声明一个委托
                //BeginInvoke可以返回委托的相关信息,第三个参数是委托完成后所执行的函数
                //最后一个参数可以在第三个参数代表的函数中通过ar.AsyncState获得
                //另外,第三个参数所代表的函数的参数为IAsyncResult
                d1.BeginInvoke(1, 3000, TakesAWhileCompleted, d1);
                for (int i = 0; i < 100; i++)
                {
                    Console.Write(".");
                    Thread.Sleep(50);
                }
            }
        }
    }
    //利用Lambda
    using System;
    using System.Text;
    using System.Collections.Generic;
    using System.Threading;
    namespace Test
    {
        class Program
        {
            static int TakesAWhile(int data, int ms)
            {
                Console.WriteLine("TakesAWhile started");
                Thread.Sleep(ms);
                Console.WriteLine("TakesAWhile completed");
                return ++data;
            }
            //定义一个委托
            public delegate int TakesAWhileDelegate(int data, int ms);
            static void Main()
            {
                TakesAWhileDelegate d1 = TakesAWhile;//声明一个委托
                //Lambda表达式可以直接访问该作用域外部的变量d1,此时
                //不需要把一个值服务BeginInvoke最后一个参数
                d1.BeginInvoke(1, 3000, ar =>
                {
                    int result = d1.EndInvoke(ar);
                    Console.WriteLine("result:{0}", result);
                }, null);
                for (int i = 0; i < 100; i++)
                {
                    Console.Write(".");
                    Thread.Sleep(50);
                }
            }
        }
    }



    
    
  • 相关阅读:
    2021.4.2 Python基础及介绍
    2021.4.1 团队组队
    冲击信号
    信号卷积(线性卷积)
    数字图像处理基本概念
    计算机视觉发展及主要研究方向
    SVM 之 SMO 算法
    FP Growth 算法
    Apriori 算法
    26 实战页式内存管理 下
  • 原文地址:https://www.cnblogs.com/zztong/p/6695150.html
Copyright © 2011-2022 走看看