實(shí)際開發(fā)中,對(duì)于一些耗時(shí)較長的操作,我們往往會(huì)將其封裝成異步方式調(diào)用,以加速系統(tǒng)響應(yīng)或改善用戶體驗(yàn),下面是一個(gè)示例:
有一個(gè)現(xiàn)成的類MyMath,里面有一個(gè)Add方法:
1 public class MyMath
2 {
3
4 public int Add(int a, int b)
5 {
6 System.Threading.Thread.Sleep(5000);
7 return a + b;
8 }
9
10 }
對(duì)Add方法做下封裝,對(duì)了對(duì)比,同時(shí)提供“同步調(diào)用”與"異步調(diào)用"二個(gè)版本:
1 /// 異步調(diào)用
2 /// </summary>
3 /// <param name="a"></param>
4 /// <param name="b"></param>
5 /// <param name="callBackAction"></param>
6 /// <returns></returns>
7 static void AyscAdd(int a, int b, Action<int> callBackAction)
8 {
9 Func<int> func = () =>
10 {
11 return new MyMath().Add(a, b);
12 };
13 func.BeginInvoke((ar) =>
14 {
15 var result = func.EndInvoke(ar);
16 callBackAction.Invoke(result);
17 },
18 null);
19
20 }
21
22 /// <summary>
23 /// 同步調(diào)用
24 /// </summary>
25 /// <param name="a"></param>
26 /// <param name="b"></param>
27 /// <returns></returns>
28 static int SyncAdd(int a, int b)
29 {
30 return new MyMath().Add(a, b);
31 }
最后調(diào)用驗(yàn)證:
1 static void Main(string[] args)
2 {
3 Console.WriteLine("同步調(diào)用開始=>");
4 int a = SyncAdd(1, 2);
5 Console.WriteLine("同步調(diào)用結(jié)束:" + a);
6
7 Console.WriteLine("--------------------------");
8
9 Console.WriteLine("異步調(diào)用開始=>");
10 AyscAdd(3, 4, (result) =>
11 {
12 Console.WriteLine("異步調(diào)用結(jié)果:" + result);
13 });
14 Console.WriteLine("異步調(diào)用結(jié)束");
15
16 Console.ReadLine();
17 }
完整代碼:
1 using System;
2
3 namespace ActionDemo
4 {
5 class Program
6 {
7 static void Main(string[] args)
8 {
9 Console.WriteLine("同步調(diào)用開始=>");
10 int a = SyncAdd(1, 2);
11 Console.WriteLine("同步調(diào)用結(jié)束:" + a);
12
13 Console.WriteLine("--------------------------");
14
15 Console.WriteLine("異步調(diào)用開始=>");
16 AyscAdd(3, 4, (result) =>
17 {
18 Console.WriteLine("異步調(diào)用結(jié)果:" + result);
19 });
20 Console.WriteLine("異步調(diào)用結(jié)束");
21
22 Console.ReadLine();
23 }
24
25 /// <summary>
26 /// 異步調(diào)用
27 /// </summary>
28 /// <param name="a"></param>
29 /// <param name="b"></param>
30 /// <param name="callBackAction"></param>
31 /// <returns></returns>
32 static void AyscAdd(int a, int b, Action<int> callBackAction)
33 {
34 Func<int> func = () =>
35 {
36 return new MyMath().Add(a, b);
37 };
38 func.BeginInvoke((ar) =>
39 {
40 var result = func.EndInvoke(ar);
41 callBackAction.Invoke(result);
42 },
43 null);
44
45 }
46
47 /// <summary>
48 /// 同步調(diào)用
49 /// </summary>
50 /// <param name="a"></param>
51 /// <param name="b"></param>
52 /// <returns></returns>
53 static int SyncAdd(int a, int b)
54 {
55 return new MyMath().Add(a, b);
56 }
57 }
58
59 public class MyMath
60 {
61
62 public int Add(int a, int b)
63 {
64 System.Threading.Thread.Sleep(5000);
65 return a + b;
66 }
67
68 }
69 }
輸出結(jié)果如下:
同步調(diào)用開始=>
同步調(diào)用結(jié)束:3
--------------------------
異步調(diào)用開始=>
異步調(diào)用結(jié)束
異步調(diào)用結(jié)果:7

浙公網(wǎng)安備 33010602011771號(hào)