private async Task <AcquisitionActionResult> InternalStopRecord(StopRecordParameter parameters, AcquisitionActionResult result)
        {
            // delayed stop
            if (this.DeviceDistanceFromStopTriggerPoint > 0 && this.IsDependencyOperational <IDistanceAgent>())
            {
                var distanceData = await AgentBroker.Instance.TryExecuteOnFirst <IDistanceAgent, DistanceData>(a => a.CurrentData).GetValueOrDefault().ConfigureAwait(false);

                await AgentBroker.Instance.ObserveAny <IDistanceAgent, DistanceData>("DataSource").Where(data => data.AbsoluteDistance >= distanceData.AbsoluteDistance + this.DeviceDistanceFromStopTriggerPoint).Take(1).ToTask().ConfigureAwait(false);
            }

            result = await StopRecordCore(parameters, result).ConfigureAwait(false);

            return(result);
        }
 protected virtual Task <AcquisitionActionResult> StopRecordCore(StopRecordParameter parameters, AcquisitionActionResult result)
 {
     return(Task.FromResult(result));
 }
 public Task <AcquisitionActionResult> StopRecord(StopRecordParameter parameters)
 {
     return(MakeStateTransition(AcquisitionStep.StopRecord, this.Provider.StopRecord, parameters, InternalStopRecord));
 }