我正在拦截我在我的应用程序中托管的服务的wcf调用,以显示有关服务的数据(每个方法处理多少个调用,记录方法参数等)。除此之外,我想测量每种方法的执行时间。
我已经使用Castle拦截器包装实例,并使用StopWatch
来测量同步方法。
但是,我不能在异步方法上使用秒表,因为我有2种不同的方法(对于beginInvoke
和EndInvoke
,我拦截了WCF调用者。)
如何衡量执行时间,或者至少关联Begin和End的调用?
谢谢
答案 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()
{
}
}