我想在我的 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(或类似的)。
