目前在原分頁透過form post的方式,會開啟新分頁,並且載入報表PDF檔;但在報表完成之前,原分頁發出的請求都會等到報表完成後才執行。
嘗試將產生PDF的Function改為非同步的方式,仍舊是沒有改善;希望能在載入報表的同時又不影響其他操作,還請各位指教~
public async Task<ActionResult> Print0304(BCSTD0304QueryViewModel ViewModel)
{
/*
略
*/
byte[] renderedBytes = await fileUtils.CreateReportTobyteAsync(reportPath, data, "1", reportParameters);
Response.AppendHeader("Content-Disposition", "inline; filename=\"" + filename + "\"");
return File(renderedBytes, FileUtils.getContentType(filename));
}
public Task<byte[]> CreateReportTobyteAsync(string reportPath, IList data, string type, ReportParameter[] reportParameterCollection = null)
{
/*
略
*/
Task<byte[]> task = Task<byte[]>.Factory.StartNew(() =>
{
return renderedBytes = localReport.Render(reportType, null, out mimeType, out encoding, out fileNameExtension, out streams, out warnings);
});
return task;
}
我覺得比較大問題來自於你client的操作哪種不想有同步等待被卡住
希望能在載入報表的同時"又不影響其他操作"
這部份建議描述具體一點
通常client-side可以改ajax就能夠不會導致同步排隊等待
而server-side建議要評估你要做的任務有沒有承先啟後或者有一定等待優先順序
(比方送餐人員一定要等內場廚師準備好客人點的菜才可能再請送餐人去負責送餐)
不然不是每個都直接改非同步的寫法就可以了
我希望使用者在新分頁在載入報表的同時,原分頁向Server要頁面或ajax等都不會被卡住,像是平行處理那樣。
我的想法是透過非同步方法讓其他執行緒完成報表的處理(完成後就回傳client-side),而其他的請求就不會被卡住,這樣的想法不知道是不是可行的?
原分頁向Server要頁面你那段分開作ajax請求就不會卡搂
聽起來你應該是設計成一次load然後觸發兩個或以上的請求
不要把任務寫在同一個請求中
把任務拆分各自不同http request 透過ajax就好
是分開的,操作流程是
在首頁點選超連結至A頁面
A頁面點擊Button,透過form post,開出新分頁,等待報表完成
透過瀏覽器的上一頁回到首頁,點選其他超連結就卡住了