Esempio n. 1
0
        private Decimal Calculate(CalcShippingAsyncArgs parameters)
        {
            Decimal result         = 0;
            Boolean isFreeShipping = false;

            System.Threading.Thread.Sleep(500);  //simulate a short delay

            switch (parameters.ShipVia)
            {
            case "normal":
                if (parameters.OrderTotal >= _freeThreshold)
                {
                    isFreeShipping = true;
                }
                else
                {
                    result = parameters.Weight * _normalRate;
                }
                break;

            case "express":
                result = parameters.Weight * _expressRate;
                break;
            }

            if ((result < _minimum) && (!isFreeShipping))
            {
                result = _minimum;
            }

            return(result);
        }
Esempio n. 2
0
        protected override IAsyncResult BeginExecute(
            AsyncCodeActivityContext context,
            AsyncCallback callback, object state)
        {
            CalcShippingAsyncArgs parameters = new CalcShippingAsyncArgs
            {
                Weight     = Weight.Get(context),
                OrderTotal = OrderTotal.Get(context),
                ShipVia    = ShipVia.Get(context),
            };

            Func <CalcShippingAsyncArgs, Decimal> asyncWork = a => Calculate(a);

            context.UserState = asyncWork;
            return(asyncWork.BeginInvoke(parameters, callback, state));
        }