【发布时间】:2018-05-11 01:34:29
【问题描述】:
我正在创建一个 Windows 服务,它使用 FileSystemWatcher 来监视特定文件夹以添加特定文件类型。由于 Created 事件和文件实际准备好被操作之间的差距,我创建了一个 Queue<T> 来保存需要处理的文件名。在 Created 事件处理程序中,项目被添加到队列中。然后使用计时器,我定期从队列中抓取第一个项目并处理它。如果处理失败,则将该项目添加回队列,以便服务稍后重试处理。
这很好用,但我发现它有一个副作用:在重试所有旧的重试项目之前,不会发生对新项目的第一次处理尝试。由于队列可能包含许多项目,我想将新项目强制到队列的前面,以便首先处理它们。但是从Queue<T> documentation来看,没有明显的方法可以将一个项目添加到队列的前面。
我想我可以为新项目创建第二个队列并优先处理那个队列,但只有一个队列似乎更简单。
那么有没有一种简单的方法可以将项目添加到队列的前面?
【问题讨论】:
-
如果您要添加到队列的前端和尾部,从迂腐的角度来说,它不再是队列。
-
为什么不将重试项添加到自己的集合中以供以后处理?
-
在 STL 中,您将使用双端队列(我听说它读作“deck”,但我真的不知道)。这是一个双端队列。 cplusplus.com/reference/stl/deque System.Collections.Generic 中似乎没有,但您可以按照您描述的方式编写您自己的。
标签: c#