public AsyncSubject <Unit> Insert(IEnumerable <CacheElement> items)
        {
            var ret = OperationQueueItem.CreateInsert(OperationType.BulkInsertSqliteOperation, items);

            _operationQueue.Add(ret);

            return(ret.CompletionAsUnit);
        }
        static OperationQueueItem GroupUnrelatedInserts(IEnumerable <OperationQueueItem> unrelatedInserts)
        {
            if (unrelatedInserts.Count() == 1)
            {
                return(unrelatedInserts.First());
            }

            var subj     = new AsyncSubject <Unit>();
            var elements = unrelatedInserts.SelectMany(x =>
            {
                subj.Subscribe(x.CompletionAsUnit);
                return(x.ParametersAsElements);
            }).ToList();

            return(OperationQueueItem.CreateInsert(
                       OperationType.BulkInsertSqliteOperation, elements, subj));
        }
        private static OperationQueueItem GroupUnrelatedInserts(IEnumerable <OperationQueueItem> unrelatedInserts)
        {
            var operationQueueItems = unrelatedInserts.ToList();

            if (operationQueueItems.Count == 1)
            {
                return(operationQueueItems[0]);
            }

            var subj     = new AsyncSubject <Unit>();
            var elements = operationQueueItems.SelectMany(x =>
            {
                subj.Subscribe(x.CompletionAsUnit);
                return(x.ParametersAsElements ?? Enumerable.Empty <CacheElement>());
            }).ToList();

            return(OperationQueueItem.CreateInsert(
                       OperationType.BulkInsertSqliteOperation, elements, subj));
        }