我想在我的 GridView 中显示数据库结果,但在调用长时间运行的方法时网页非常慢。
在 GridView 中,我有一个包含以下项模板的模板字段:
<ItemTemplate>
<asp:Label ID="lblNumResults" runat="server" Text='<%# GetNumCrawlResults(Convert.ToInt32(Eval("id"))) %>'></asp:Label>
</ItemTemplate>
这是相应的方法:
public string GetNumCrawlResults(int jobId)
{
var task = Task.Run(() => Utilities.GetNumCrawlResults(jobId));
//this is slow and blocks the GUI
return Convert.ToString(task.Result);
}
这是数据库查询:
public static async Task<int> GetNumCrawlResults(int jobId)
{
DocumentCollection collection = await GetOrCreateCollectionAsync(database.SelfLink, Convert.ToString(jobId));
var result = (from c in documentDb.CreateDocumentQuery<Shared.CrawlResult>(collection.SelfLink)
select c).AsEnumerable();
return result.Count();
}
异步方法完成后,有什么方法可以分配标签文本吗?
谢谢
您的页面呈现是结果吗?我的印象是缺少task.wait()语句。
无论如何,在你的情况下,我会使用Ajax和Knockout(或类似)。