zoukankan      html  css  js  c++  java
  • 关于异步调用的例子[参考]

    程序代码如下:

    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

  • 相关阅读:
    PHP:判断客户端是否使用代理服务器及其匿名级别
    Ruby:Mechanize的使用教程
    Ruby:多线程队列(Queue)下载博客文章到本地
    Ruby:线程实现经典的生产者消费者问题
    Ruby:Open-uri和Net::HTTP的不同
    Ruby:Nokogiri
    Ruby:字符串处理函数
    Ruby:Net::HTTP
    10分钟打造强大的gvim
    命令行批量合并视频脚本
  • 原文地址:https://www.cnblogs.com/chaosimple/p/2498393.html
Copyright © 2011-2022 走看看