问题在代码里:
using System; using System.Threading; using System; using System.Threading; namespace ThreadPoolApplication { class Program { static int count = 5; static void Main(string[] args) { Test t=new Test (); ReStringMths r=new ReStringMths (t.Exec); r.BeginInvoke(new System.AsyncCallback((IResult)=>{r.EndInvoke(IResult);Console.WriteLine("类名为{0}的异步方法{1}执行完毕!",IResult.AsyncState.ToString(),IResult.AsyncState.GetType().GetMethods()[0].Name);}),t); //问题1:请问r.EndInvoke(IResult);这个IResult传进去干嘛用的?用于什么情况下? //问题2:有什么办法可以获取t.Exec的返回值? //问题3:不写r.EndInvoke(IResult);同样可以得到正确结果...但是为什么要有r.EndInvoke方法呢? System.Console.ReadKey(); } } delegate string ReStringMths(); class Test { public string Exec() { System.Console.WriteLine("Start..."); Thread.Sleep(5000); System.Console.WriteLine("End..."); return "hello"; } } }
新手..问题多多..麻烦各位了!
Test t = new Test();
ReStringMths r = new ReStringMths(t.Exec);
IAsyncResult iar = r.BeginInvoke(new System.AsyncCallback((IResult) =>
{
string s2 = r.EndInvoke(IResult); ;
Console.WriteLine("类名为{0}的异步方法{1}执行完毕!", IResult.AsyncState.ToString(), IResult.AsyncState.GetType().GetMethods()[0].Name);
}), t);
//问题1:请问r.EndInvoke(IResult);这个IResult传进去干嘛用的?用于什么情况下?
//是为了标示EndInvoke方法反回的是哪一次调用委托反回值,因为一个委托可能会被调用多次
//问题2:有什么办法可以获取t.Exec的返回值?
string s1 = r.EndInvoke(iar);//s1就是反回值
//问题3:不写r.EndInvoke(IResult);同样可以得到正确结果...但是为什么要有r.EndInvoke方法呢?
//r.EndInvoke(IResult);方法是用来接收反回值用的,
System.Console.ReadKey();
}
delegate string ReStringMths();
class Test
{
public string Exec()
{
System.Console.WriteLine("Start..."); Thread.Sleep(5000); System.Console.WriteLine("End..."); return "hello";
}
}
请学习下 IAsyncResult 接口。