我有一個ASP.Net Web窗體應用程序,通過Ajax更新面板中的按鈕單擊事件調用託管在IIS上的WCF服務。 當我點擊按鈕時,我調用一個可能需要1分鐘才能返回的WCF異步進程。我注意到任務正在運行時,我在瀏覽器中打開另一個選項卡,網頁凍結/時鐘,直到長時間運行的任務返回。我假設第一項任務是鎖定UI線程,導致其他人使用該網頁必須等待。ASP.Net異步阻塞UI
如何運行任務,更新UI的結果並且不阻止其他選項卡/用戶的UI?
這裏是一個代碼snipit:
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(假)的異步調用,但沒有做任何事情。
似乎仍然凍結,直到客場返回。如果我正在等待grdsummary.DataSource = await getSomeDataAsync();這並不意味着Page.ExecuteRegisteredAsyncTasks();直到返回後纔會被解僱? –
我確實看到註冊代碼在預渲染之前不會觸發。我按照建議添加了這段代碼,但仍然有一個頁面不會讓另一個頁面繼續,直到第一個查詢完成。我會認爲異步不會阻止用戶界面 –