Delegate中的异步调用

简介:

 1 None.gif namespace  Bingosoft.Training2007.CSharp
 2 ExpandedBlockStart.gif {
 3InBlock.gif    delegate int Sum(int num1,int num2);
 4ExpandedSubBlockStart.gif    /// <summary>
 5InBlock.gif    /// 使用Delegate的BeginInvoke方法完成一个函数的异步调用过程。
 6ExpandedSubBlockEnd.gif     /// </summary>

 7InBlock.gif    class Question6
 8ExpandedSubBlockStart.gif    {
 9ExpandedSubBlockStart.gif        /// <summary>
10InBlock.gif        /// 求两个int型数的和(仅供演示)
11InBlock.gif        /// </summary>
12InBlock.gif        /// <param name="num1"></param>
13InBlock.gif        /// <param name="num2"></param>
14ExpandedSubBlockEnd.gif        /// <returns></returns>

15InBlock.gif        public static int GetSum(int num1, int num2)
16ExpandedSubBlockStart.gif        {
17InBlock.gif            Thread.Sleep(1000);
18InBlock.gif            return num1 + num2;            
19ExpandedSubBlockEnd.gif        }
 
20InBlock.gif
21ExpandedSubBlockStart.gif        /// <summary>
22InBlock.gif        /// 用EndInvoke等待异步调用
23ExpandedSubBlockEnd.gif         /// </summary>

24InBlock.gif        public static void TestAsyn1()
25ExpandedSubBlockStart.gif        {
26InBlock.gif            Sum sum = new Sum(GetSum);
27InBlock.gif            IAsyncResult result = sum.BeginInvoke(1020,null,null);
28InBlock.gif            Console.WriteLine("计算中dot.gifdot.gif");
29InBlock.gif            int returnVal = sum.EndInvoke(result);
30InBlock.gif            Console.WriteLine(returnVal);
31ExpandedSubBlockEnd.gif        }
 
32InBlock.gif
33ExpandedSubBlockStart.gif        /// <summary>
34InBlock.gif        /// 用WaitHandle等待异步调用
35ExpandedSubBlockEnd.gif         /// </summary>

36InBlock.gif        public static void TestAsyn2()
37ExpandedSubBlockStart.gif        {
38InBlock.gif            Sum sum = new Sum(GetSum);
39InBlock.gif            IAsyncResult result = sum.BeginInvoke(1020nullnull);
40InBlock.gif            result.AsyncWaitHandle.WaitOne();
41InBlock.gif            Console.WriteLine("计算完毕:");
42InBlock.gif            int returnVal = sum.EndInvoke(result);
43InBlock.gif            Console.WriteLine(returnVal);
44ExpandedSubBlockEnd.gif        }
 
45InBlock.gif
46ExpandedSubBlockStart.gif        /// <summary>
47InBlock.gif        /// 轮训查询等待异步调用
48ExpandedSubBlockEnd.gif         /// </summary>

49InBlock.gif        public static void TestAsyn3()
50ExpandedSubBlockStart.gif        {
51InBlock.gif            Sum sum = new Sum(GetSum);
52InBlock.gif            IAsyncResult result = sum.BeginInvoke(1020nullnull);
53InBlock.gif            while (!result.IsCompleted)
54ExpandedSubBlockStart.gif            {
55InBlock.gif                Console.WriteLine("计算中dot.gif");
56ExpandedSubBlockEnd.gif            }

57InBlock.gif            int returnVal = sum.EndInvoke(result);
58InBlock.gif            Console.WriteLine(returnVal);
59ExpandedSubBlockEnd.gif        }
 
60InBlock.gif
61ExpandedSubBlockStart.gif        /// <summary>
62InBlock.gif        /// 异步调用完成后,执行回调
63ExpandedSubBlockEnd.gif         /// </summary>

64InBlock.gif        public static void TestAsyn4()
65ExpandedSubBlockStart.gif        {
66InBlock.gif            Sum sum = new Sum(GetSum);
67InBlock.gif            IAsyncResult result = sum.BeginInvoke(1020new AsyncCallback(Question6.CallBackAsyn), sum);
68InBlock.gif            Console.WriteLine("计算中dot.gif");
69ExpandedSubBlockEnd.gif        }
 
70InBlock.gif
71ExpandedSubBlockStart.gif        /// <summary>
72InBlock.gif        /// 回调函数
73InBlock.gif         /// </summary>
74ExpandedSubBlockEnd.gif        /// <param name="ar"></param>

75InBlock.gif        public static void CallBackAsyn(IAsyncResult ar)
76ExpandedSubBlockStart.gif        {
77InBlock.gif            Sum sum = (Sum)ar.AsyncState;
78InBlock.gif            int returnVal = sum.EndInvoke(ar);
79InBlock.gif            MessageBox.Show(returnVal.ToString(), "计算结果:", MessageBoxButtons.OK, MessageBoxIcon.Information);
80ExpandedSubBlockEnd.gif        }

81ExpandedSubBlockEnd.gif    }

82ExpandedBlockEnd.gif}

83 None.gif 
84 None.gif
85 None.gif // 测试Question6
86 None.gif Question6.TestAsyn1();
87 None.gifQuestion6.TestAsyn2();
88 None.gifQuestion6.TestAsyn3();
89 None.gifQuestion6.TestAsyn4();
90 None.gifConsole.WriteLine( " Press any Key to Continuedot.gif " );
91 None.gifConsole.ReadLine();
92 None.gif

happyhippy作者: Silent Void 
出处: http://happyhippy.cnblogs.com/
转载须保留此声明,并注明在文章起始位置给出原文链接。
 本文转自Silent Void博客园博客,原文链接:http://www.cnblogs.com/happyhippy/archive/2007/07/23/827901.html,如需转载请自行联系原作者
相关文章
|
12月前
|
前端开发 API
19 # promisify:将回调方法 promise 化
19 # promisify:将回调方法 promise 化
34 0
c#编程:事件delegate学习笔记-3
c#编程:事件delegate学习笔记-3
116 0
|
开发框架 安全 .NET
委托表示回调
委托表示回调
106 0
Object C学习笔记16-委托(delegate)
  在.NET中都知道委托(delegate),通俗点的解释就是可以将方法作为一个参数传到另外一个方法中使用。   委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值。
965 0