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); }
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)); }