使用拦截器测量执行时间

时间:2014-12-02 20:49:21

标签: c# aop interceptor castle

我正在拦截我在我的应用程序中托管的服务的wcf调用,以显示有关服务的数据(每个方法处理多少个调用,记录方法参数等)。除此之外,我想测量每种方法的执行时间。

我已经使用Castle拦截器包装实例,并使用StopWatch来测量同步方法。

但是,我不能在异步方法上使用秒表,因为我有2种不同的方法(对于beginInvokeEndInvoke,我拦截了WCF调用者。)

如何衡量执行时间,或者至少关联Begin和End的调用?

谢谢

2 个答案:

答案 0 :(得分:0)

听起来这个问题已在这里得到解答Using the Stopwatch with Async methods

干杯

答案 1 :(得分:0)

知道了,

我意识到invocation.ReturnValue执行任务所以我所要做的就是实现TaskInterceptor

public class TaskInterceptor : IInterceptor
{
    public void Intercept(IInvocation invocation)
    {
        var task = invocation.ReturnValue as Task;

        InterceptBeforeInvoking();

        invocation.Proceed();

        task.ContinueWith(InterceptAfterInvocation);


    }

    private void InterceptAfterInvocation(Task obj)
    {


    }

    private void InterceptBeforeInvoking()
    {


    }
}