我的目标是将具有返回类型的任何函数传递给Execute方法,并序列化并存储其结果。下面是我要尝试做的一个粗略想法,显然不会编译,但希望它能使想法得到理解。我想我也应该能够递归地处理嵌套任务。有什么想法吗?
public static TResult Execute<TResult>(Func<TResult> method)
where TResult : class
{
var result = method();
if(result is Task)
{
var taskResult = await result;
StoreResult(taskResult);
}
else
{
StoreResult(result);
}
}
最佳答案
我同意Lee的评论,即Func<Task<TResult>>
的单独重载是正确的解决方案。
但是,如果您真的想使用一个重载来执行此操作,则可以使用反射和dynamic
来完成此工作:
public async static Task Execute<TResult>(Func<TResult> method) where TResult : class
{
var result = method();
if (typeof(TResult).IsGenericType
&& typeof(TResult).GetGenericTypeDefinition() == typeof(Task<>))
{
var taskResult = await (dynamic)result;
StoreResult(taskResult);
}
else
{
StoreResult(result);
}
}
关于c# - 是否可以确定方法是否返回Task并等待它返回?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40539091/