Exemple #1
0
        /// <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));
        }
Exemple #2
0
        /// <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));
        }
Exemple #3
0
 public StartTimed(TimedFlowContext timedContext)
 {
     _timedContext = timedContext;
 }
Exemple #4
0
 public StopTime(TimedFlowContext timedContext, Action <TimeSpan> onComplete)
 {
     _timedContext = timedContext;
     _onComplete   = onComplete;
 }