首页 新闻 会员 周边

Autofac castle进行AOP拦截如何对异步方法操作

0
悬赏园豆:20 [待解决问题]

使用Autofac和castle进行AOP操作对同步方法比较好处理,拦截后可以在方法Proceed()执行前和执行后加入自己的处理,也可以对执行后的结果加工下。可是对于异步Async的方法如何处理呢,异步是返回一个TASK,如果我想对方法执行后处理好像处理不了,不知道哪位高手有处理过类似的问题,给个例子哦,谢了!

问题补充:

有人碰到过此问题吗?

sammy123的主页 sammy123 | 初学一级 | 园豆:174
提问于:2019-04-09 20:15

很好解决的

做自己-jason 3年前
< >
分享
所有回答(2)
0

泛型反射问题?

吴瑞祥 | 园豆:29449 (高人七级) | 2019-04-09 20:21

好像不是吧

支持(0) 反对(0) sammy123 | 园豆:174 (初学一级) | 2019-04-13 09:02
0

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

春风一笑 | 园豆:202 (菜鸟二级) | 2020-05-29 15:12

方法执行前是可以操作的,关键是在方法执行完后如何如何加入操作呢,比如说缓存的AOP方法执行前如果缓存有就执行返回没有的话执行方法然后写入缓存中,异步方法中改如何实现呢

支持(0) 反对(0) sammy123 | 园豆:174 (初学一级) | 2020-06-03 19:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册