protected override T Intercept <T>(Expression expr, System.Func <T> continuation) { Trace parentTrace = currentTrace; Trace trace = new Trace(expr); try { currentTrace.AddChild(trace); currentTrace = trace; T result = base.Intercept(expr, continuation); trace.Result = result; return(result); } catch (AbruptTerminationException ex) { trace.Exception = ex.Trace.Exception; throw; } catch (Exception ex) { trace.Exception = ex; throw new AbruptTerminationException(trace); } finally { currentTrace = parentTrace; } }