IIS 上任务的可靠后台排队

Reliable background queuing for task on IIS

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

这是我的要求:

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

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

3) 队列将在任务完成时将其删除。我可能需要一些方法来管理队列的大小以防止过度使用资源。可能可以为每个任务设置时间限制,并在分配的时间后强制取消任务以释放 space 队列。

规格: - .Net 4.0 框架 - IIS

我能够通过引用 Stephen Cleary AspNetBackgroundTasks

来实现所需的功能

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

收到待关闭通知后,Asp.Net 通知对象。使用 TaskCompleteSource,它仅在 运行 任务计数为零时将其状态更新为已完成状态,应用程序等待所有任务完成,然后才允许应用程序关闭。

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

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