示例#1
0
        public void Multliple_method_calls_linetotal()
        {
            using (var db = new FakeMyDbContext()) {
                var sods = new List <SalesOrderDetail>();
                for (int i = 0; i < 10; i++)
                {
                    sods.Add(new SalesOrderDetail()
                    {
                        SalesOrderId = 71774,
                        ProductId    = 905,
                        OrderQty     = 4,
                        UnitPrice    = 218.454m
                    });
                }
                db.SalesOrderDetails.AddRange(sods);

                using (Log.Logger.BeginTimedOperation("Calculating quick total", "Test")) {
                    _calcLinePriceCounter.Reset();
                    var results = db.SalesOrderDetails
                                  .Where(sod => sod.SalesOrderId == 71774)
                                  .ToList()
                                  .Select(sod => new {
                        sod.OrderQty,
                        sod.UnitPrice,
                        LineTotal = CalculateLinePrice(
                            sod.OrderQty,
                            sod.UnitPrice,
                            _calcLinePriceCounter)
                    }).ToList();

                    _calcLinePriceCounter.Write();
                }
            }
        }
示例#2
0
        public async Task Run(CancellationToken?cancellationToken = null)
        {
            EnsureIsNotDisposed();
            _cancellationToken = cancellationToken ?? CancellationToken.None;
            var processorOptions = new ExecutionDataflowBlockOptions
            {
                BoundedCapacity = MaxQueueSize
            };

            _processor = new ActionBlock <IClientEvent>(Process, processorOptions);
            _subject?.Dispose();
            _subject   = new Subject <IBotEvent>();
            _queueSize = _context.Logger.GaugeOperation(QueueSizeGaugeName, "items", () => _processor.InputCount);
            _received.Reset();
            Events = _subject.AsObservable();
            Notify(new BotStarted());
            _state = BotState.Started;
            await _processor.Completion;

            if (_exception != null)
            {
                throw _exception;
            }
        }
示例#3
0
        public void Multliple_method_calls_margin()
        {
            using (var db = new FakeMyDbContext()) {
                var sods = new List <SalesOrderDetail>();
                for (int i = 0; i < 10; i++)
                {
                    sods.Add(new SalesOrderDetail()
                    {
                        SalesOrderId = 71774,
                        ProductId    = 905,
                        OrderQty     = 4,
                        UnitPrice    = 218.454m
                    });
                }
                db.SalesOrderDetails.AddRange(sods);

                var products = new Product()
                {
                    ProductId    = 905,
                    StandardCost = 199.3757m
                };
                db.Products.Add(products);

                using (Log.Logger.BeginTimedOperation("Calculating margin slowly", "Test")) {
                    _calcLinePriceCounter.Reset();
                    _calcLineCostCounter.Reset();
                    _calcMarginCounter.Reset();
                    var results = db.SalesOrderDetails
                                  .Where(sod => sod.SalesOrderId == 71774)
                                  .Join(db.Products,
                                        sod => sod.ProductId,
                                        product => product.ProductId,
                                        (sod, product) => new { sod, product })
                                  .ToList()
                                  .Select(li => new {
                        li.sod.OrderQty,
                        li.sod.UnitPrice,
                        li.product.StandardCost,
                        LineTotal = CalculateLinePrice(
                            li.sod.OrderQty,
                            li.sod.UnitPrice,
                            _calcLinePriceCounter),
                        LineCost = CalculateLineCost(
                            li.sod.OrderQty,
                            li.product.StandardCost,
                            _calcLineCostCounter),
                        Margin = CalculateMargin(
                            CalculateLineCost(
                                li.sod.OrderQty,
                                li.product.StandardCost,
                                _calcLineCostCounter),
                            CalculateLinePrice(
                                li.sod.OrderQty,
                                li.sod.UnitPrice,
                                _calcLinePriceCounter),
                            _calcMarginCounter)
                    }).ToList();

                    _calcLinePriceCounter.Write();
                    _calcLineCostCounter.Write();
                    _calcMarginCounter.Write();
                }
            }
        }