【问题标题】:Reflect the returnType of an async method反映异步方法的 returnType
【发布时间】:2014-08-24 09:09:28
【问题描述】:

下面是我希望用于实现缓存提供程序的拦截器的代码。我需要确定将被调用的方法的返回类型。当调用的方法是同步的时,这非常简单。但是我遇到的大多数方法都是异步的,它们正在返回一个任务。

如何使用反射来确定异步方法的返回类型?

public void Intercept(IInvocation invocation)
{
    try
    {
        if (invocation.Method.Name.StartsWith("Retrieve"))
        {
            var returnType = invocation.Method.ReturnType;
            if (returnType.IsGenericType &&
                returnType.GetGenericTypeDefinition() == typeof (Task<>))
            {
                var returnTypeOfTheTask = returnType.NeedSomeHelpHere();
            }
        }
        _circuitBreaker.Execute(invocation);
    }
    // ...
}

【问题讨论】:

标签: c# reflection aop castle-dynamicproxy


【解决方案1】:

你可以使用任何一个

var returnTypeOfTheTask = returnType.GetGenericArguments()[0];

var returnTypeOfTheTask = returnType.GenericTypeArguments[0];

您将使用哪个主要取决于您需要支持的平台(例如,第一个选项从 .NET 2.0 开始存在,但在 Modern UI 中不受支持,而第二个选项在 .NET 4.0 中不存在)。如果两种方法都能满足您的需求,我建议您使用第二种方法。

【讨论】:

  • 谢谢你,这很有魅力,我选择了第二种方法
猜你喜欢
  • 2022-11-04
  • 1970-01-01
  • 2019-11-03
  • 2020-10-29
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-19
相关资源
最近更新 更多