关于IAsyncResult强制转换为AsyncResult
在异步调用的BeginInvoke方法中的回调方法中可一调用异步调用的EndResult方法。
代码如下。传递给EndResult方法的参数是BeginInvoke方法的结果ar(假设),ar没有AsyncDelegate属性,但强制转换为AsyncResult后就有该属性了,此时就可以调用EndInvoke方法,我搞不懂为什么转换为AsyncResult后就有AsyncDelegate属性了???
static void CallbackMethod(IAsyncResult ar)
{
AsyncMethodCaller caller =(AsyncMethodCaller)ar.AsyncDelegate;
string returnValue = caller.EndInvoke(out threadId, ar) ; Console.WriteLine( "The call executed on thread {0}, with return value \ "{1}\ ". ", threadId, returnValue);
}
------解决方案--------------------IAsyncResult是一个接中,并没有定义AsyncDelegate属性,但AsyncResult是一个类,它定义了AsyncDelegate属性。
而且EndInvoke的ar参数实际上返回的是一个AsyncResult对象。只不过因为它实现了IAsyncResult接中,所以可以互相转换。