Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用长时间运行方法阻止ASP.NET web窗体中的网页_C#_Asp.net_Gridview_Asynchronous_Webforms - Fatal编程技术网

C# 用长时间运行方法阻止ASP.NET web窗体中的网页

C# 用长时间运行方法阻止ASP.NET web窗体中的网页,c#,asp.net,gridview,asynchronous,webforms,C#,Asp.net,Gridview,Asynchronous,Webforms,我想在我的GridView中显示一个数据库结果,但是当调用一个长时间运行的方法时,web页面的速度非常慢 在GridView中,我有一个带有以下项模板的模板字段: <ItemTemplate> <asp:Label ID="lblNumResults" runat="server" Text='<%# GetNumCrawlResults(Convert.ToInt32(Eval("id"))) %>'></asp:Label>

我想在我的GridView中显示一个数据库结果,但是当调用一个长时间运行的方法时,web页面的速度非常慢

在GridView中,我有一个带有以下项模板的模板字段:

<ItemTemplate>  
        <asp:Label ID="lblNumResults" runat="server" Text='<%# GetNumCrawlResults(Convert.ToInt32(Eval("id"))) %>'></asp:Label>
</ItemTemplate>
这是数据库查询:

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();
}
publicstaticasync任务GetNumCrawlResults(int-jobId)
{
DocumentCollection collection=await GetOrCreateCollectionAsync(database.SelfLink,Convert.ToString(jobId));
var result=(来自documentDb.CreateDocumentQuery(collection.SelfLink)中的c)
选择c.AsEnumerable();
返回result.Count();
}
异步方法完成后,有没有办法分配标签文本


谢谢

您的页面呈现结果如何?我觉得task.wait()语句缺失


无论如何,在您的情况下,我会使用Ajax和Knockout(或类似的工具)。

您的页面呈现是结果吗?我觉得task.wait()语句缺失


无论如何,在您的情况下,我会使用Ajax和Knockout(或类似的工具)。

有多慢?在任何情况下,对于异步方法,use都需要使用
await
语法。对于Web表单,您需要将页面标记为异步,并使用所述的
RegisterAsyncTask
。是否无法将此计数作为初始查询的一部分?数据绑定仍处于迭代事件中,在每次迭代中调用长时间运行的函数是个坏主意。@mason谢谢。我已经做了一个小例子,但它仍然是bocking网站负载为5秒。我使用的是.NET4.5,让我们弄清楚:在代码隐藏中运行的任何代码都将阻止页面加载,无论您是否使用异步。这就是ASP.NET模型的工作原理:它只向下发送一次响应,因此所有代码都会阻止响应。如果您希望发送页面的HTML,然后稍后再发送数据,那么您应该转而在客户端上使用AJAX来加载信息?在任何情况下,对于异步方法,use都需要使用
await
语法。对于Web表单,您需要将页面标记为异步,并使用所述的
RegisterAsyncTask
。是否无法将此计数作为初始查询的一部分?数据绑定仍处于迭代事件中,在每次迭代中调用长时间运行的函数是个坏主意。@mason谢谢。我已经做了一个小例子,但它仍然是bocking网站负载为5秒。我使用的是.NET4.5,让我们弄清楚:在代码隐藏中运行的任何代码都将阻止页面加载,无论您是否使用异步。这就是ASP.NET模型的工作原理:它只向下发送一次响应,因此所有代码都会阻止响应。如果您希望发送页面的HTML,然后稍后再发送数据,那么您应该转而在客户机上使用AJAX来加载信息。
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();
}