在异步通信中,主线程不会等待线程执行结束,而是直接往下运行。然后回调函数会继续执行,其中EndInvoke方法会接收返回值。
这种不会阻塞主线程,而是用回调函数去执行结果,这种就是回调函数。参考代码如下:
- Main
class Program
{
public delegate int dele_async(int a);
static void Main(string[] args)
{
dele_async dele_method = new dele_async(Executefunc);
//委托方法实例化以后有Invoke和BeginInvoke方法,Invoke是同步调用,BeginInvoke是异步等待。
//int result = dele_method.Invoke(10);
IAsyncResult result = dele_method.BeginInvoke(10,asynccallback,dele_method);
Console.WriteLine("主函数执行完毕!");
Console.ReadLine();
}
private static int Executefunc(int m)
{
Console.WriteLine("正在执行invoke函数...");
Thread.Sleep(2000);
Console.WriteLine("执行invoke函数完毕");
return m * m;
}
private static void asynccallback(IAsyncResult iar)
{
Console.WriteLine("正在执行callback函数...");
dele_async dele_method = (dele_async)iar.AsyncState;
int result = dele_method.EndInvoke(iar);
Console.WriteLine(result);
Console.WriteLine("执行callback函数完毕");
}
}
网友评论