private void AddBatchableOperation(BatchableOperation requestedOperation)
        {
            // Note: it can take 0.5 seconds for each single Delete or Create operation,
            // so try to batch them up so it doesn't take as long
            //
            // One at a time, it took 493.84 seconds to process 439 records.
            // In batch, it took 101.93 seconds to process the same 439 records.
            // That's 493.84 / 101.93 = 4.8x speedup

            _batchableOperations.Add(requestedOperation);
            if (_batchableOperations.Count >= 50)
            {
                FlushBatchableOperations();
            }
        }
        /// <summary>
        /// Schedules an object to be deleted the next time a batch of operations is sent.
        /// Remember to call FlushBatchableOperations at the end.
        /// A batch will also be sent automatically when the batch queue is full.
        /// </summary>
        /// <param name="className">The class to delete from</param>
        /// <param name="objectId">The object ID to delete</param>
        internal void RequestDeleteObject(string className, string objectId)
        {
            var requestedOperation = new BatchableOperation(RestSharp.Method.DELETE, $"classes/{className}/{objectId}", "{}");

            AddBatchableOperation(requestedOperation);
        }
        /// <summary>
        /// Schedules an object to be added the next time a batch of operations is sent.
        /// Remember to call FlushBatchableOperations at the end.
        /// A batch will also be sent automatically when the batch queue is full.
        /// </summary>
        /// <param name="className">The class to add to</param>
        /// <param name="objectId">The JSON of the object to create</param>
        internal void RequestCreateObject(string className, string json)
        {
            var requestedOperation = new BatchableOperation(RestSharp.Method.POST, $"classes/{className}", json);

            AddBatchableOperation(requestedOperation);
        }