异步调用
因为程序运行速度比较慢,所以要把长时间运行的代码进行异步处理。所以做了一个如下的测试:
Using directives
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");
}
}
}
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的话,可以到这里看到原文。不过俺的例子好像比它的更明显些
公众号:老翅寒暑