.net 4.5、asp.net mvc:从 ASP.NET 应用程序运行持久进程(1-2 分钟)的最佳方法是什么,它应该在单线程环境中运行,我的意思是进程一次只为一个用户启动,所有其他用户的执行必须等到当前执行完成?场景如下:用户单击运行某种持久计算的按钮,http 响应立即返回给用户,然后用户必须通过单独的请求手动请求计算状态。 Asp.net http session 中止不应导致进程终止,它应该继续进行。该进程可能在同一台或不同的服务器上运行。
最佳答案
我将向您展示如何使用 http://hangfire.io 执行此任务– 在 ASP.NET 应用程序中执行即发即弃、延迟和重复任务的极其简单的方法。无需 Windows 服务。
首先,通过 NuGet 安装包。有问题请看Quick Start官方文档中的指南。
PM> Install-Package Hangfire
打开您的 OWIN Startup 类并添加以下行:
public void Configure(IAppBuilder app)
{
GlobalConfiguration.Configuration.UseSqlServerStorage("connection_string");
app.UseHangfireDashboard();
app.UseHangfireServer();
}
然后编写将执行长时间运行工作的方法(我应用属性一次只执行一个方法):
[DisableConcurrentExecution]
public void LongRunning()
{
// Some processing stuff
}
然后在后台调用一个方法作为即发即弃的方法来立即响应用户:
public ActionResult Perform()
{
BackgroundJob.Enqueue(() => LongRunning());
return View();
}
如果要通知用户作业完成,请考虑使用 SignalR 并相应地附加 LongRunning
方法。
关于c# - 如何在asp.net下异步运行持久进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13038823/