• 关于异步调用的例子[参考]


    程序代码如下:

    using System;
    using System.Threading;
    
    namespace AsyncDelegateDemo
    {
        delegate void AsyncFoo(int i);
    
        class Program
        {
            /// <summary>
            /// 输出当前线程的信息
            /// </summary>
            /// <param name="name">方法名称</param>
            static void PrintCurrentThreadInfo(string name)
            {
                Console.WriteLine("Thread Id of " + name + " is: " +
                    Thread.CurrentThread.ManagedThreadId + ", current thread is " +
                    (Thread.CurrentThread.IsThreadPoolThread ? "" : "not ") +
                    "thread pool thread.");
            }
    
            /// <summary>
            /// 测试方法,Sleep一定时间
            /// </summary>
            /// <param name="i">Sleep的时间</param>
            static void Foo(int i)
            {
                PrintCurrentThreadInfo("Foo()");
                Thread.Sleep(i);
            }
    
            /// <summary>
            /// 投递一个异步调用
            /// </summary>
            static void PostAsync()
            {
                AsyncFoo caller = new AsyncFoo(Foo);
    
                //启动异步调用,第一个参数为AsyncFoo委托的参数
                //第二个参数为回调函数
                //第三个参数为传送给回调函数的参数
                //
                //注意:如果AsyncFoo委托有多个参数,回调函数之前就会有多个参数,和AsyncFoo委托的参数一一对应
                //也就是说BeginInvoke的参数个数=AsyncFoo委托的参数个数+2
                //加的两个参数分别是:回调函数和传送给回调函数的参数
                caller.BeginInvoke(1000, new AsyncCallback(FooCallBack), caller);
            }
    
            /// <summary>
            /// 异步调用的回调函数
            /// </summary>
            /// <param name="ar"></param>
            static void FooCallBack(IAsyncResult ar)
            {
                PrintCurrentThreadInfo("FooCallBack()");
                AsyncFoo caller = (AsyncFoo)ar.AsyncState;
                caller.EndInvoke(ar);
            }
    
            static void Main(string[] args)
            {
                PrintCurrentThreadInfo("Main()");
                for (int i = 0; i < 10; i++)
                {
                    PostAsync();
                }
    
                Console.ReadLine();
            }
        }
    }
    

     程序的运行截图如下:

    注:

    参考文献地址:

    http://developer.51cto.com/art/200908/145502.htm

  • 相关阅读:
    最长公共子串
    Windows 下GitHub 安装和使用
    JSON 解析
    利用bootsrap控件 实现文件上传功能
    CCF 工资计算
    Java 对象引用以及对象赋值
    Java 关于创建String对象过程的内存分配
    JAVA堆内存和栈内存初步了解
    URAL 1152. False Mirrors (记忆化搜索 状压DP)
    POJ 1113 Wall(Graham求凸包周长)
  • 原文地址:https://www.cnblogs.com/chaosimple/p/2498393.html
Copyright © 2020-2023  润新知