【发布时间】:2014-02-17 07:22:06
【问题描述】:
所以基本上 T 有一个返回类型,我想取回通用返回类型。示例:
private TResult EndInvoke<T, TResult>(Func<T, TResult> asyncCaller, IAsyncResult asyncResult)
{
TResult result = default(TResult);
try
{
result = asyncCaller.EndInvoke(asyncResult);
}
catch (Exception exception)
{
// get exception details.
}
return result;
}
如何只传递调用方法的 T 并获取 TResult? 请注意,我只有 T。
编辑:我的意思是如何调用这个方法?
编辑:我想要一个通用的 EndInvoke,因为我对不同的 EndInvoke 有很大的尝试,然后我想要 EndInvoke 的结果。
【问题讨论】:
-
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
-
So basically T has a return type实际上,你有返回类型TResult。问题不清楚。 -
这个函数看起来它的全部意义(结合另一个函数,可能名为
BeginInvoke)是启用异步调用。如果你只有T,想调用asyncCaller,并且想在同一个函数中处理结果,你只能使用同步调用。你能澄清一下你想要做什么吗? -
我认为这是不可能的。对于泛型类型,您需要在定义中将类型作为类型参数 T 或 TResult 提及。如果您只想在方法定义中提及 T 而不是 TResult,它怎么知道 TResult 可以是什么?为此,您可以使用动态或对象结果类型。
-
我强烈建议您考虑将 APM 模式 (
IAsyncResult) 转换为任务。您可以使用Task.Factory.FromAsync。任务是强类型的,可以捕获异常并且通常更容易使用。
标签: c# generics func iasyncresult