反映异步方法的returnType

本文关键字:returnType 异步方法 | 更新日期: 2023-09-27 18:19:17

下面是我希望用于实现cacheprovider的拦截器的代码。我需要确定将要调用的方法的返回类型。当调用的方法是同步的时,这是非常直接的。然而,我遇到的大多数方法都是异步的,它们返回一个任务。

我如何使用反射来找出异步方法的返回类型?

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);
    }
    // ...
}

反映异步方法的returnType

您可以使用

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

var returnTypeOfTheTask = returnType.GenericTypeArguments[0];

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