如何在运行任务后或在任务运行期间更新 Asp .Net 中的 UI?

Posted

技术标签:

【中文标题】如何在运行任务后或在任务运行期间更新 Asp .Net 中的 UI?【英文标题】:How to update UI in Asp .Net after running a Task or during task running? 【发布时间】:2021-06-12 18:18:46 【问题描述】:

我正在使用 asp .net webforms,并且我有一个生成 Excel 报告的按钮,这是一个很长的操作。 我希望在任务运行期间和完成后更新标签的文本。

按钮点击:

 protected void btnExportExcel_Click(object sender, EventArgs e)
 
     FetchAllFilesAsync(false);
 

调用函数:

 private async Task FetchAllFilesAsync(bool isPDF = false)
 
     await Task.Run(() =>  DownLoadAllAsyncExcelAndPDFS(isPDF); );
 

任务功能

private void DownLoadAllAsyncExcelAndPDFS(bool isPDF = false)

   //Do Some Work

【问题讨论】:

观察:Task.Run 是对线程池资源的浪费。您的请求线程将无所事事,不妨使用它来同步调用方法。 您可能希望将background processing technology 与向客户端推送通知的方法结合使用。 【参考方案1】:

async on ASP.NET yields to the thread pool, not the HTTP client。您需要使用 AJAX、SignalR 或类似技术让服务器向客户端发送更新。

【讨论】:

是的,如果没有第三方,似乎无法做到这一点。我用Pushy 做到了,在任务完成时向javascript发送通知

以上是关于如何在运行任务后或在任务运行期间更新 Asp .Net 中的 UI?的主要内容,如果未能解决你的问题,请参考以下文章

如何在安装期间为计划任务设置正确的用户

BAT 文件不会在 Windows 10 任务计划程序中运行,但会以管理员身份或在提升的命令提示符下运行

长时间任务后,ActiveRecord 在简单更新期间抛出 Mysql2::Error::ConnectionError

ASP.NET MVC 在 Azure Kudu 部署期间运行 Gruntfile.js 作为构建的一部分

如何在任务完成时更新运行结果?

如何在 asyncio 中同时运行任务?