异步调用
因为程序运行速度比较慢,所以要把长时间运行的代码进行异步处理。所以做了一个如下的测试:
#region Using directives
using System;
using System.Collections.Generic;
using System.Text;
#endregion
namespace testASycCall
{
public delegate void AsyncCaller();
class Program
{
void Call0()
{
Console.WriteLine("Call0:Begin");
System.Threading.Thread.Sleep(2000);
Console.WriteLine("Call0:End");
}
void Call1()
{
Console.WriteLine("Call1:Begin");
System.Threading.Thread.Sleep(2000);
Console.WriteLine("Call1:End");
}
static void Main(string[] args)
{
Program p = new Program();
Console.WriteLine("ready async call0");
AsyncCaller ac = new AsyncCaller(p.Call0);
Console.WriteLine("invoke async call0");
IAsyncResult ar = ac.BeginInvoke(null, null);
Console.WriteLine("call call1");
p.Call1();
Console.WriteLine("call1 end");
Console.WriteLine("wait call 0 end");
ar.AsyncWaitHandle.WaitOne();
Console.WriteLine("call 0 end");
}
}
}
程序运行结果如下:
ready async call0
invoke async call0
call call1
Call0:Begin
Call1:Begin
Call0:End
Call1:End
call1 end
wait call 0 end
call 0 end
看起来并行的还比较明显!
相同的例子在MSDN上面也有,如果你机器上装了MSDN的话,可以到这里看到原文。不过俺的例子好像比它的更明显些
1楼
这只是简单的一个异步调用。真正要用好,还要花很多的功夫。
2004-11-15 13:42 | Kain
2楼
我是真看不懂!!!!
2005-11-23 18:10 | 10cn.net
3楼
看懂了
2008-08-29 17:32 | 逖靖寒