前景提要
Autofac castle进行AOP拦截如何对异步方法操作
0 悬赏园豆: 20 [待解决问题] 使用Autofac和castle进行AOP操作对同步方法比较好处理,拦截后可以在方法Proceed()执行前和执行后加入自己的处理,也可以对执行后的结果加工下。可是对于异步Async的方法如何处理呢,异步是返回一个TASK,如果我想对方法执行后处理好像处理不了,不知道哪位高手有处理过类似的问题,给个例子哦,谢了! Autofac AOP 问题补充:有人碰到过此问题吗? sammy123 | 初学一级 | 园豆: 174
提问于:2019-04-09 20:15 显示帮助
使用"Ctrl+Enter"可进行快捷提交,评论支持部分 Markdown 语法:[link](http://example.com) _italic_ **bold** `code`。
< > 分享
分享您的问题
所有回答(2) 0 泛型反射问题? 吴瑞祥 | 园豆:28830 (高人七级) | 2019-04-09 20:21 好像不是吧 支持( 0 ) 反对( 0 ) sammy123 | 园豆:174 (初学一级) | 2019-04-13 09:02 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 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 编辑文本 预览 上传图片
Ctrl+Enter键快速提交
清除回答草稿
您需要 登录 以后才能回答,未注册用户请先 注册 。