使用长时间运行的方法阻止 ASP.NET Web 窗体中的网页



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

最新更新