/// <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.")}"); }
/// <summary> /// 异步计算查询表达式,进行学术文献直方图的检索。启用分页。 /// </summary> public ParitionedPromise <CalcHistogramResult> CalcHistogramAsync(string expression, string attributes) { var promise = new ParitionedPromise <CalcHistogramResult>(); promise.SetProducerTask(CalcHistogramAsync(expression, attributes, promise)); return(promise); }