private void Run(SearchFilter filter) { if (_jobMonitoringService.DetectCurrentJobInterrupt()) { return; } var startOfRun = DateTime.UtcNow; var results = _orderApi.Retrieve(filter); while (true) { var orders = results.Body.DeserializeToOrderList().orders; UpsertOrders(orders); if (_jobMonitoringService.DetectCurrentJobInterrupt()) { return; } if (results.LinkHeader.NoMo()) { break; } results = _orderApi.RetrieveByLink(results.LinkHeader.NextLink); } // Set the Batch State end marker to the time when this run started // var orderBatchEnd = (startOfRun).SubtractFudgeFactor(); _batchRepository.UpdateOrdersGetEnd(orderBatchEnd); }