public TextLinesParallelProcessingFilter(IPipe <LineProcessingContext> lineProcessingPipe, ConcurrencySettings settings) { _lineProcessingPipe = lineProcessingPipe; _settings = settings; _processLine = new ActionBlock <LineProcessingContext>( context => _lineProcessingPipe.Send(context), new ExecutionDataflowBlockOptions { BoundedCapacity = 1, EnsureOrdered = false, MaxDegreeOfParallelism = _settings.DegreeOfParallelism }); }
/// <summary> /// Creates three lists (one for each concurrency type) which contain all the offers /// which have been applied to the given transaction. /// </summary> /// <param name="retailTransaction">Transaction to collect offers from</param> /// <param name="sortedExclusiveOffers">List of all exclusive offers</param> /// <param name="sortedBestPriceOffers">List of all best price offers</param> /// <param name="sortedConcurrentOffers">List of all compound offers</param> private static void InitializeOfferLists(RetailTransaction retailTransaction, out List <OfferGroup> sortedExclusiveOffers, out List <OfferGroup> sortedBestPriceOffers, out List <OfferGroup> sortedConcurrentOffers) { sortedExclusiveOffers = new List <OfferGroup>(); sortedBestPriceOffers = new List <OfferGroup>(); sortedConcurrentOffers = new List <OfferGroup>(); List <OfferGroup> sortedAllConcurrentOffers = new List <OfferGroup>(); var concurrencyForGroup = ConcurrencySettingsPerOfferGroup(retailTransaction); foreach (OfferGroup offerGroup in concurrencyForGroup.Keys) { ConcurrencySettings settings = concurrencyForGroup[offerGroup]; switch (settings.ConcurrencyMode) { case ConcurrencyMode.Exclusive: sortedExclusiveOffers.Add(offerGroup); break; case ConcurrencyMode.BestPrice: sortedBestPriceOffers.Add(offerGroup); break; case ConcurrencyMode.Compounded: sortedAllConcurrentOffers.Add(offerGroup); if (!concurrencyForGroup[offerGroup].IsCompoundable) { sortedConcurrentOffers.Add(offerGroup); } break; } } // If there are best price discounts, compounded discounts count as best price discounts if (sortedBestPriceOffers.Count > 0) { sortedBestPriceOffers.AddRange(sortedAllConcurrentOffers); } }
public TextProcessingPipeBuilder(IInputProvider input, ILineProcessingPipeBuilder lineProcessingPipeBuilder, IOptions <ConcurrencySettings> settings) { _input = input; _lineProcessingPipeBuilder = lineProcessingPipeBuilder; _settings = settings.Value; }