/// <summary> /// INTERNAL API /// /// Measures time from receiving the first element and completion events - one for each subscriber of this <see cref="IFlow{TOut,TMat}"/>. /// </summary> public static Source <TOut, TMat2> Timed <TIn, TOut, TMat, TMat2>(Source <TIn, TMat> source, Func <Source <TIn, TMat>, Source <TOut, TMat2> > measuredOps, Action <TimeSpan> onComplete) { var ctx = new TimedFlowContext(); var startTimed = Flow.Create <TIn>().Transform(() => new StartTimed <TIn>(ctx)).Named("startTimed"); var stopTimed = Flow.Create <TOut>().Transform(() => new StopTime <TOut>(ctx, onComplete)).Named("stopTimed"); return(measuredOps(source.Via(startTimed)).Via(stopTimed)); }
/// <summary> /// INTERNAL API /// /// Measures time from receiving the first element and completion events - one for each subscriber of this <see cref="IFlow{TOut,TMat}"/>. /// </summary> public static Flow <TIn, TOut2, TMat2> Timed <TIn, TOut, TOut2, TMat, TMat2>(Flow <TIn, TOut, TMat> flow, Func <Flow <TIn, TOut, TMat>, Flow <TIn, TOut2, TMat2> > measuredOps, Action <TimeSpan> onComplete) { // todo is there any other way to provide this for Flow, without duplicating impl? // they do share a super-type (FlowOps), but all operations of FlowOps return path dependant type var ctx = new TimedFlowContext(); var startTimed = Flow.Create <TOut>().Transform(() => new StartTimed <TOut>(ctx)).Named("startTimed"); var stopTimed = Flow.Create <TOut2>().Transform(() => new StopTime <TOut2>(ctx, onComplete)).Named("stopTimed"); return(measuredOps(flow.Via(startTimed)).Via(stopTimed)); }
public StartTimed(TimedFlowContext timedContext) { _timedContext = timedContext; }
public StopTime(TimedFlowContext timedContext, Action <TimeSpan> onComplete) { _timedContext = timedContext; _onComplete = onComplete; }