我们知道异步调用会在线程池中,调用或者创建一个线程来运行异步委托指向的方法。
但是当异步委托指向的方法运行结束之后,AsyncCallback委托指向的方法和主线程方法怎么同步呢?
我做了一个例子
View Code
1 private delegate void DelegateRun();
2 protected void Page_Load(object sender, EventArgs e)
3 {
4 DelegateRun dr = Run;
5 dr.BeginInvoke(Complete, null);
6 for (int i = 0; i < 100; i++)
7 {
8 Response.Write("Main " + i.ToString() + "<br/>");
9 Response.Flush();
10 Thread.Sleep(100);
11 }
12 }
13 private void Run()
14 {
15 for (int i = 0; i < 5; i++)
16 {
17 Response.Write("worker thread " + i.ToString() + "<br/>");
18 Response.Flush();
19 Thread.Sleep(1000);
20 }
21 }
22 private void Complete(IAsyncResult resulte)
23 {
24 for (int i = 0; i < 50; i++)
25 {
26 Response.Write("worker thread Complete" + i.ToString()+ "<br/>");
27 Thread.Sleep(100);
28 }
29
2 protected void Page_Load(object sender, EventArgs e)
3 {
4 DelegateRun dr = Run;
5 dr.BeginInvoke(Complete, null);
6 for (int i = 0; i < 100; i++)
7 {
8 Response.Write("Main " + i.ToString() + "<br/>");
9 Response.Flush();
10 Thread.Sleep(100);
11 }
12 }
13 private void Run()
14 {
15 for (int i = 0; i < 5; i++)
16 {
17 Response.Write("worker thread " + i.ToString() + "<br/>");
18 Response.Flush();
19 Thread.Sleep(1000);
20 }
21 }
22 private void Complete(IAsyncResult resulte)
23 {
24 for (int i = 0; i < 50; i++)
25 {
26 Response.Write("worker thread Complete" + i.ToString()+ "<br/>");
27 Thread.Sleep(100);
28 }
29
所以我觉得 AsyncCallback委托指向的方法依然是多线程运行。