Ниже приведен код для перехватчика, который я хочу использовать для реализации cacheprovider. Мне нужно определить тип возвращаемого метода, который будет вызываться. Это довольно прямолинейно, когда вызываемый метод является синхронным. Однако большинство методов, с которыми я сталкиваюсь, являются async, они возвращают Задачу.Reflect the returnType метода асинхронизации
Как я могу использовать отражение, чтобы выяснить тип возврата методов async?
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);
}
// ...
}
См. [Это для получения параметров типа из экземпляра типового типа] (http://stackoverflow.com/questions/293905/reflection-getting-the-generic-parameters-from-a-system-type-instance). –
Просто попробуйте 'var returnTypeOfTheTask = returnType.GenericTypeArguments [0];'. – haim770