Esempio n. 1
0
        /// <summary>
        /// 异步计算查询表达式,进行学术文献直方图的检索。启用分页。
        /// </summary>
        private async Task CalcHistogramAsync(string expression, string attributes, ParitionedPromise <CalcHistogramResult> promise)
        {
            if (string.IsNullOrEmpty(attributes))
            {
                throw new ArgumentNullException(nameof(attributes));
            }
            if (promise == null)
            {
                throw new ArgumentNullException(nameof(promise));
            }
            Logger.AcademicSearch.Enter(this, $"{expression}, Paged");
            var noMoreResults = false;

            for (var offset = 0;; offset += PagingSize)
            {
                var result = await CalcHistogramAsync(expression, PagingSize, offset, attributes);

                if (result.Histograms.Any(h => h.Entries.Count > 0))
                {
                    promise.DeclarePartitionFinished(result);
                }
                if (result.Histograms.All(h => h.Entries.Count < PagingSize))
                {
                    // 没有结果了。
                    noMoreResults = true;
                    break;
                }
            }
            Logger.AcademicSearch.Exit(this, $"{expression}; {(noMoreResults ? "" : " Truncated.")}");
        }
Esempio n. 2
0
        /// <summary>
        /// 异步计算查询表达式,进行学术文献直方图的检索。启用分页。
        /// </summary>
        public ParitionedPromise <CalcHistogramResult> CalcHistogramAsync(string expression, string attributes)
        {
            var promise = new ParitionedPromise <CalcHistogramResult>();

            promise.SetProducerTask(CalcHistogramAsync(expression, attributes, promise));
            return(promise);
        }