c# - 如何在asp.net下异步运行持久进程?

标签 c# asp.net .net long-running-processes

.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/

相关文章:

c# - 如果我不知道实际的对象类型,如何在 C# 中比较两个 IEnumerable<T>?

c# - 如何将 ReSharper 的 Dotsettings 文件集成到 SonarQube 中?

c# - Server.Transfer 到 HttpHandler

c# - 在 View 中声明函数或方法

c# - Observable.Retry 记录消息?

.net - 为什么.NET 不允许跨线程操作?

c# - 为用户调整面板大小

c# - Entity Framework + 存储库 + 工作单元

c# - 多层应用程序中类的推荐命名约定是什么?

asp.net - 连接 SQL 查询和 NULL 列的结果