Exemplo n.º 1
0
 /// <summary>
 /// Aggregate stream values.
 /// </summary>
 /// <typeparam name="TIn">Type of source stream.</typeparam>
 /// <typeparam name="TOut">Type of output stream.</typeparam>
 /// <param name="source">Source stream.</param>
 /// <param name="initialState">The initial state.</param>
 /// <param name="aggregator">The aggregator function.</param>
 /// <param name="deliveryPolicy">An optional delivery policy.</param>
 /// <param name="name">An optional name for this stream operator.</param>
 /// <returns>Output stream.</returns>
 public static IProducer <TOut> Aggregate <TIn, TOut>(
     this IProducer <TIn> source,
     TOut initialState,
     Func <TOut, TIn, TOut> aggregator,
     DeliveryPolicy <TIn> deliveryPolicy = null,
     string name = nameof(Aggregate))
 => source.Aggregate <TOut, TIn, TOut>(
     initialState,
     (state, input, envelope, emitter) =>
 {
     var newState = aggregator(state, input);
     emitter.Post(newState, envelope.OriginatingTime);
     return(newState);
 },
     deliveryPolicy,
     name);