我的问题与此帖子相关:使用DynamicProxy拦截异步方法的调用
我想实现一个拦截器,它可以处理返回Task
或Task<T>
结果的异步方法。
我使用以下代码返回ContinueWith
结果(以便调用者方法等待拦截器完成工作)
var task = invocation.ReturnValue as Task;
invocation.ReturnValue = task.ContinueWith(c =>
{ code that should execute after method finish });
以上代码对于Task
的结果运行良好,但在Task<T>
结果的情况下,ContinueWith
将把返回类型从Task<T>
更改为Task
。
我需要调用重载的方法ContinueWith
,它返回Task<T>
,但是为此我需要将invocation.ReturnValue
强制转换为Task<T>
我没有找到以任何方式动态强制转换的方法。 有人知道如何做吗?
我还尝试通过反射调用此方法,但参数是无法直接传递的lambda函数。