我正在编写一个接收消息/请求并异步执行它们的 Windows 服务——它不需要等待项目完成,也不需要关心结果。我能够使用 System.Threading.Tasks.Task 成功地将请求作为任务执行。这些项目中的大多数执行速度很快(不到一秒),但有些需要更长的时间(2-3 分钟)。
作为 Windows 服务,我需要响应“停止”命令,并且某些任务仍将运行。最好不要取消任务,因为运行时间较长的任务可能会使数据处于不良状态(并且回滚非常棘手)。
处理这个问题的最佳方法是什么?我想保留一份我已经开始的任务列表,以便我可以执行 WaitAll。在服务执行期间,它将处理数以万计的请求。我怎么知道什么时候从列表中删除已完成的任务,这样列表才不会疯狂增长?我认为我不应该持有对那么多 Task 对象的引用。
提前致谢。