我正在尝试实现一个队列来处理使用task.run(function())排队的任务。
以下是我的要求:
1)在应用程序上下文死亡后,线程池不应该停止。我需要确保打电话。 (我相信这需要线程成为前台线程)
2)此外,我需要能够记录这些错误。每个函数都有自己的错误处理。我认为这是一场火灾而忘记,因为我实际上并不需要将数据传回给调用者,但需要记录信息。
3)队列将在完成后删除任务。我可能需要一些管理队列大小的方法来防止过度使用资源。可能的是,能够为每个任务设置时间限制,并在分配时间后将其强制取消以释放空间队列。
规格: - .Net 4.0框架 - IIS
答案 0 :(得分:1)
我通过引用Stephen Cleary AspNetBackgroundTasks
来实现愿望功能通过使用单例模式,我能够创建一个对象的单个实例,该实例用作管理任务的包装器。该代码可以通过使用iregisteredobject来防止关闭。
收到挂起关闭的通知后,Asp.Net会通知该对象。使用TaskCompleteSource,它只在运行任务计数等于零时将其状态更新为已完成状态,应用程序等待所有任务完成,然后才允许应用程序关闭。
此设计存在风险。风险与当前在主内存中运行的通知系统非常相似。如果断电,代码将丢失。
此外,请记住对共享变量进行原子更改或实现线程安全锁定技术。