使用Autofac和castle进行AOP操作对同步方法比较好处理,拦截后可以在方法Proceed()执行前和执行后加入自己的处理,也可以对执行后的结果加工下。可是对于异步Async的方法如何处理呢,异步是返回一个TASK,如果我想对方法执行后处理好像处理不了,不知道哪位高手有处理过类似的问题,给个例子哦,谢了!
有人碰到过此问题吗?
泛型反射问题?
好像不是吧
public async void Intercept(IInvocation invocation)
{
try
{
invocation.Proceed();
// 异步获取异常,先执行
if (IsAsyncMethod(invocation.Method))
{
var result = invocation.ReturnValue;
if (result is Task)
{
await Task.WhenAll(result as Task);
}
}
}
catch(Exception ex)
{
throw ex;
}
}
private bool IsAsyncMethod(MethodInfo method)
{
return (
method.ReturnType == typeof(Task) ||
(method.ReturnType.IsGenericType && method.ReturnType.GetGenericTypeDefinition() == typeof(Task<>))
);
}
方法执行前是可以操作的,关键是在方法执行完后如何如何加入操作呢,比如说缓存的AOP方法执行前如果缓存有就执行返回没有的话执行方法然后写入缓存中,异步方法中改如何实现呢
很好解决的
– 做自己-jason 3年前