1、定义委托,创建委托实例并传入需要处理的函数
delegate string DoSomethingDele(int input);
DoSomethingDele _do = new DoSomethingDele(Dosomething);
//此函数用做测试,模拟操作占用的时间。返回占用的时间数。
private static string Dosomething(int second)
{
Thread.Sleep(second * 1000);
return "延时了" + second + "秒";
}
2、定义回调处理函数
AsyncCallback asyncCallBackHander = (ar) =>
{
Action<string> action = ar.AsyncState as Action<string>;//获取传入的回调函数
string str = _do.EndInvoke(ar);//获取异步处理返回值
action(str);//将返回值传入回调函数执行。
};
3、定义回调函数,传入回调处理函数执行,它才是真正执行的回调函数
private static void PrintCallBack(string str)
{
Console.WriteLine("异步调用完成:" + str);
}
4、调用beginInvoke,传入异步操作的参数,传入回调处理函数,传入回调函数(作为回调处理函数的参数)
var iasyncResult = _do.BeginInvoke(3,
asyncCallBackHander
,
(Action<string>)PrintCallBack);
Console.WriteLine("异步调用完毕,不必管它,继续做一些其它的事");
5、完毕。
在执行完BeginInvoke后,可以不用再去管它。接下来进行其它的任务,回调函数会在异步调用后自动启动。