使用System.Func匿名和带有回调函数的返回对象
本文关键字:函数 回调 返回 对象 Func System 使用 | 更新日期: 2023-09-27 17:59:22
也许是一个简单的问题,但我如何才能获得异步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 ??
}
使用回调函数时,我没有委托签名。当然,我可以在类的作用域中创建一个委托,但也许有一个读取回调函数中返回值的解决方案。
谢谢。
在委托上使用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);
}
您也可以这样做(不是在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 );
}