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

程序代码如下:

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

posted @ 2012-05-13 18:47  ChaoSimple  阅读(389)  评论(0编辑  收藏  举报