也许是简单的问题,但我怎样才能获得异步System.Func的返回对象?
考虑一下:
private void Start(String a)
{
System.Func<String, objectA> callasync = delegate(String strA)
{
return bla(stra); // Which return a objectA
}
callasync.BeginInvoke(a, callback, null);
}
private void callback(IAsyncResult ar)
{
// Here I want the objectA but how ??
}
使用回调函数,我没有委托签名。当然,我可以在类的范围内创建一个委托,但也许有一个解决方案来读取回调函数中的返回值。
感谢。
答案 0 :(得分:1)
在委托上使用BeginInvoke
时,传递给回调的IAsyncResult
将是AsyncResult
类的实例。从那里你可以获得你的代表的实例并在其上调用EndInvoke
。
private void Start(string a)
{
Func<string, objectA> d = strA => bla(strA);
d.BeginInvoke(a, Callback, null);
}
private void Callback(IAsyncResult ar)
{
AsyncResult asyncResult = (AsyncResult)ar;
Func<string, objectA> d = (Func<string, objectA>)asyncResult.AsyncDelegate;
objectA result = d.EndInvoke(ar);
}
答案 1 :(得分:0)
你也可以这样做(不是用IDE编写,可能包含错误)
private Func<String, objectA> _callDoWorkAsync = DoWork;
private static string DoWork( objectA strA )
{
return bla( strA );
}
private void Start( String a )
{
_callDoWorkAsync.BeginInvoke( a, callback, null );
}
private void callback( IAsyncResult ar )
{
objectA strA = (objectA) _callDoWorkAsync.EndInvoke( ar );
}