Fork me on GitHub

.net知识和学习方法系列(十)委托异步调用方法b

 接着上一篇说,
IAsyncResult asyncresult1 = dl.BeginInvoke(2, null, null);
中的两个null参数是用来作什么用的呢?
先说第一个,null,它的类型为AsyncCallback的委托,看一下这种委托的定义:
public delegate void AsyncCallback(IAsyncResult ar);
这个委托对应的方法应该是发IAsyncResult为参数,void为返值的方法。这个方法通常是异步调用成功后调起的。可以在这个方法内执行一些异步执行成功的信息处理。
第二个null是一些自定义的状态信息,可以自己定义。
好,按照这个思路,改造一下上一篇的第二个例子,如下:
 1static void Main(string[] args)
 2        {
 3            Program p = new Program();
 4            DL dl = p.Square;
 5            AsyncCallback AC = new AsyncCallback(StateMethod);
 6            IAsyncResult r = dl.BeginInvoke(2, AC, 1);
 7            IAsyncResult r1 = dl.BeginInvoke(4nullnull);
 8            Console.WriteLine(dl.EndInvoke(r) + DateTime.Now.ToString() + r.AsyncState.ToString());
 9            Console.WriteLine(dl.EndInvoke(r1) + DateTime.Now.ToString()); 
10        }

11        public static  void StateMethod(IAsyncResult AR)
12        {
13            Console.WriteLine("异步调用完毕,状态信息:" + AR.AsyncState);
14        }

15        public int Square(int i)
16        {
17            Thread.Sleep(3000); //要引入命名空间System.Threading
18            return i * i;
19        }

20    }
21    delegate int DL(int i);
22
posted @ 2008-04-19 14:29  桂素伟  阅读(404)  评论(0编辑  收藏  举报