我有一个ASP.Net Web窗体应用程序,它通过Ajax Update面板中的按钮单击事件调用IIS上托管的WCF服务。 当我单击按钮时,我调用WCF异步过程,可能需要1分钟才能返回。我注意到任务正在运行时,我在浏览器中打开另一个选项卡,网页冻结/时钟,直到长时间运行的任务返回。我假设第一个任务是锁定UI线程,导致其他人使用该网页必须等待。
如何运行任务,使用结果更新UI而不阻止其他标签/用户的UI?
以下是代码片段:
protected void btnsearch_ServerClick(object sender, EventArgs e)
{
Page.RegisterAsyncTask(new PageAsyncTask(async () =>
{
DataSet ds;
ds = await data.GetReportAsync();
grdsummary.DataSource = ds.Tables[0];
grdsummary.DataBind();
}));
}
我确实尝试将.ConfigureAwait(false)添加到Async调用但没有做任何事情。
答案 0 :(得分:2)
我假设第一个任务是锁定UI线程,导致其他人使用该网页必须等待。
这是ASP.NET;没有UI线程。
最有可能的是,session state阻止了多个同时发出的请求。
请注意,多个用户不会受到影响;只有同一会话中的多个请求才会被手工化。
答案 1 :(得分:0)
注册是一回事,执行是彼此:)
之后只需添加一个ExecuteRegisteredAsyncTasks调用,它应该可以正常工作,或者请在完成此调用的地方添加代码。
protected void btnSearch_Click(object sender, EventArgs e)
{
Page.RegisterAsyncTask(new PageAsyncTask(async () =>
{
grdsummary.DataSource = await getSomeDataAsync();
grdsummary.DataBind();
}));
Page.ExecuteRegisteredAsyncTasks();
}