检索MongoDB文档时ToList期间的进度条



我有成千上万的文档将被检索,位抖动并显示在数据网格中。 整个情况可能需要 10-30 秒,并且需要一个显示进度的视觉对象(比选框进度条更实质性的东西(

目标是使用当前检索到的文档数更新状态字段,因为它们通过ToList()(或者应该ToListAsync()(。 假设进度更新速率是每 250 毫秒回调显示当前文档计数(或列表长度? 我不确定如何指示任务执行有助于进度/状态更新程序的回调,或者如何设置ToList进行进度调用。

private async void CollectionDropDownList_SelectedIndexChanged(object sender, EventArgs e)
{
string collectionName = collectionDDL.SelectedItem.ToString();
// progressBar/status begin stuff
await LoadCollection(collectionName);
// progressBar/status finish stuff
… set the datagrid datasource to the datatable
}
private Task LoadCollection(string collectionName) 
{
return Task.Run(() =>
{
var builder = Builders<BsonDocument>.Filter;
var filter = builder.Ne("Type", "Header") & builder.Ne("Type", (string)null);
var collectionDocuments =
Database
.GetCollection<BsonDocument>(collectionName)
.Find(filter)
.ToList()                    
;
… 
// reshape documents into a DataTable
}
}

您可以使用进度:

private async void CollectionDropDownList_SelectedIndexChanged(object sender, EventArgs e)
{
// ...
var progress = new Progress<int>(n => /* show progress */);
await LoadCollection(collectionName, progress);
// ...
}
private Task LoadCollection(string collectionName, IProgress<int> progress) 
{
return Task.Run(() =>
{
// ...
progress.Report(i);
// ...
}
}

我不知道MongoDB是否有异步API。如果是这样,您甚至可以摆脱Task.Run

相关内容

  • 没有找到相关文章

最新更新