コード例 #1
0
        internal async Task <IReadOnlyList <TEntity> > QueryListAsync <TEntity>(string tableName, BuilderNode node, CancellationToken cancellationToken = default) where TEntity : class
        {
            QueryEntityResponseProjection <TEntity>?result = null;
            List <TEntity>?items = null;

            // Does not reuse QueryAsyncEnumerable because of potential allocations
            var isFirst = true;

            do
            {
                var contentNode = isFirst ? node : new PaginationTokenNode(result?.PaginationToken, node);
                using var httpContent = new QueryHighLevelHttpContent(this, tableName, contentNode);

                using var response = await Api.SendAsync(Config, httpContent, cancellationToken).ConfigureAwait(false);

                result = await ReadAsync <QueryEntityResponseProjection <TEntity> >(response, cancellationToken).ConfigureAwait(false);

                if (items == null)
                {
                    items = result.Items;
                }
                else
                {
                    items.AddRange(result.Items);
                }

                isFirst = false;
            } while (result.PaginationToken != null);

            return(items);
        }
コード例 #2
0
        internal async IAsyncEnumerable <IReadOnlyList <TEntity> > QueryAsyncEnumerable <TEntity>(string tableName, BuilderNode node,
                                                                                                  [EnumeratorCancellation] CancellationToken cancellationToken = default) where TEntity : class
        {
            QueryEntityResponseProjection <TEntity>?result = null;

            var isFirst = true;

            do
            {
                var contentNode = isFirst ? node : new PaginationTokenNode(result?.PaginationToken, node);
                using var httpContent = new QueryHighLevelHttpContent(this, tableName, contentNode);

                using var response = await Api.SendAsync(Config, httpContent, cancellationToken).ConfigureAwait(false);

                result = await ReadAsync <QueryEntityResponseProjection <TEntity> >(response, cancellationToken).ConfigureAwait(false);

                yield return(result.Items);

                isFirst = false;
            } while (result.PaginationToken != null);
        }