public async Task <UnitType> Execute(IOrchestrationContext context)
        {
            var state = await context.PerformRead(new GetRiderState()
            {
                RiderId = RiderId
            });

            if (state.CurrentRide != null)
            {
                throw new InvalidOperationException("currently doing a ride - must finish ride first");
            }

            if (!GeoLocation.Equals(CurrentAvailability, state.Availability))
            {
                await context.PerformEvent(new RiderEvent()
                {
                    RiderId = RiderId,
                    PreviousAvailability = state.Availability,
                    CurrentAvailability  = CurrentAvailability
                });
            }

            return(UnitType.Value);
        }
        /// <summary>
        /// Compares two AdditionalGeoLocations for equality.
        /// </summary>
        /// <param name="AdditionalGeoLocation">A AdditionalGeoLocation to compare with.</param>
        /// <returns>True if both match; False otherwise.</returns>
        public Boolean Equals(AdditionalGeoLocation AdditionalGeoLocation)

        => GeoLocation.Equals(AdditionalGeoLocation.GeoLocation) &&

        ((!Name.HasValue && !AdditionalGeoLocation.Name.HasValue) ||
         (Name.HasValue && AdditionalGeoLocation.Name.HasValue && Name.Value.Equals(AdditionalGeoLocation.Name.Value)));