IIS 上任务的可靠后台队列

Posted

技术标签:

【中文标题】IIS 上任务的可靠后台队列【英文标题】:Reliable background queuing for task on IIS 【发布时间】:2018-07-02 13:06:18 【问题描述】:

我正在尝试实现一个队列来处理使用 task.run(function()) 排队的任务。

这是我的要求:

1) 应用程序上下文终止后线程池不应停止。我需要确保会拨打电话。 (我相信这需要线程是前台线程)

2) 此外,我需要能够记录这些错误。每个函数都有自己实现的错误处理。我会认为这是一场火灾并忘记,因为我实际上不需要将数据传回给调用者,但需要记录信息。

3) 队列将在任务完成时移除它们。我可能需要某种方式来管理队列的大小,以防止过度使用资源。可能,能够为每个任务设置时间限制,并在分配的时间以释放空间队列后强制它取消。

规格: - .Net 4.0 框架 - IIS

【问题讨论】:

不,做不到,别费心去尝试。改用 windows 服务 1) 是不可能的。此外,如果没有人在“查看”网站,网站的设计并不是为了继续运行(或神奇地自启动)。想想老鼠和月亮 我投票结束这个问题,因为没有问题需要解决 您能否就我的要求提出建议,使另一个版本成为可能? @DaqueshiaIrvin 我认为我的第一条评论已经足够清楚了。不能用 IIS 来完成,请改用 windows 服务。或单独的exe 【参考方案1】:

我可以通过引用 Stephen Cleary AspNetBackgroundTasks 来实现愿望功能

通过使用单例模式,我能够创建一个对象的单个实例,该对象用作管理任务的包装器。该代码能够通过使用 iregisteredobject 来防止关闭。

在收到挂起关闭的通知后,Asp.Net 会通知对象。使用 TaskCompleteSource(仅当正在运行的任务计数为零时将其状态更新为已完成状态),应用程序在允许应用程序关闭之前等待所有任务完成。

这种设计存在风险。与当前在主内存中运行的通知系统非常相似的风险。如果断电,代码就会丢失。

此外,请记住对共享变量进行原子更改或实施线程安全锁定技术。

【讨论】:

以上是关于IIS 上任务的可靠后台队列的主要内容,如果未能解决你的问题,请参考以下文章

让进程在后台可靠运行的几种方法

Linux 技巧:让进程在后台可靠运行的几种方法

不可不知:Linux让进程在后台可靠运行的方法

Linux 技巧:让进程在后台运行的可靠方法

Linux 技巧:让进程在后台可靠运行的几种方法

Linux 技巧:让进程在后台可靠执行的几种方法