委托的BeginInvoke方法可以异步的执行该委托绑定的方法,endinvoke用来接收委托返回的参数,并且一直堵塞直到方法执行完成才会继续执行后续代码,示例如下
public void mine()
{
Func<string> func = InitConfigTable;
func.BeginInvoke(asyncResult =>
{
Func<string> handler = (Func<string>)((AsyncResult)asyncResult).AsyncState;
string msg = handler.EndInvoke(asyncResult);
Console.WriteLine(msg);
}, func);
Console.WriteLine("ok");
}
private string InitConfigTable()
{
Thread.Sleep(2000);
string msg = "haha";
return msg;
}
begininvoke传入一个asyncCallback的委托和一个object,当方法执行完毕,则会自动执行asyncCallback绑定的方法如果InitConfigTable需要传入参数的话,那么begininvoke前面的参数要与InitConfigTable保持一致,比如
public void mine()
{
string s="wow";
Func<string,string> func = InitConfigTable;
func.BeginInvoke(s,asyncResult =>
{
Func<string> handler = (Func<string>)((AsyncResult)asyncResult).AsyncState;
string msg = handler.EndInvoke(asyncResult);
Console.WriteLine(msg);
}, func);
Console.WriteLine("ok");
}
private string InitConfigTable(string s)
{
Thread.Sleep(2000);
string msg = s;
return msg;
}
begininvoke传入的另一个参数object可以为空也可以传入上面定义的func委托,如果为空,则begininvoke方法内部的AsyncState需要改为AsyncDelegate,否则会出错