【发布时间】:2012-07-09 10:12:12
【问题描述】:
BeginInvoke 之后的回调,AsyncResult.AsyncDelegate 需要转换为正确的类型,只有这样EndInvoke 才可以访问。
但是我使用的是泛型,所以我需要为 N 个泛化方法定义 N 个回调吗?
这是课程:
public class Async
{
public delegate object Func(); //void with no parameter
public delegate TResult Func<T, TResult>(T arg); //one parameter with result
public static void Execute(IAsyncSubscriber subscriber, Func action)
{
action.BeginInvoke(Callback, subscriber);
}
public static void Execute<T, T1>(IAsyncSubscriber subscriber, T param, Func<T, T1> action)
{
action.BeginInvoke(param, Callback, subscriber);
}
private static void Callback(IAsyncResult ar)
{
AsyncResult result = (AsyncResult)ar;
IAsyncSubscriber subscriber = (IAsyncSubscriber)result.AsyncState;
Func action = (Func) result.AsyncDelegate;
object returnValue = action.EndInvoke(result); //To call endinvoke
subscriber.Callback(returnValue);
}
}
【问题讨论】:
-
如果我理解正确,您的假设是正确的。您将需要定义
N回调。从好的方面来说,你只会做一次,所以没什么大不了的,只是一些重复的工作:) -
好的,谢谢!你能移动你的评论来回答吗,我会关闭这个。
标签: c# generics asynchronous c#-2.0