private async Task SetAddressToCurrentSelection(Address address, CancellationToken token = default(CancellationToken)) { // Needs to run in a background thread to prevent a potential deadlock issue. await Task.Run(async() => { var selectionMode = await _addressSelectionModeSubject.Take(1).ToTask(token); if (selectionMode == AddressSelectionMode.PickupSelection) { _pickupAddressSubject.OnNext(address); await _networkRoamingService.UpdateMarketSettingsIfNecessary(new Position { Latitude = address.Latitude, Longitude = address.Longitude }); } else { _destinationAddressSubject.OnNext(address); } }, token); // Do NOT await this CalculateEstimatedFare(token).FireAndForget(); _canExecuteBookingOperation.OnNext(true); }