private void PollForShippingRatesAsync() { Status shippingStatus = Status.Unknown; task = client.GetShippingRatesForCheckout(Checkout, async(shippingRates, status, error) => { shippingStatus = status; if (error != null) { WillChangeValue("isFinished"); done = true; DidChangeValue("isFinished"); FailedToReceiveShippingRates?.Invoke(this, error); } else if (shippingStatus == Status.Complete) { ShippingRates = shippingRates; WillChangeValue("isFinished"); done = true; DidChangeValue("isFinished"); DidReceiveShippingRates(this, ShippingRates); } else if (shippingStatus == Status.Processing) { await Task.Delay(500); PollForShippingRatesAsync(); } }); }