我正在寻找任务队列的理想/线程安全实现,它将根据内部条件启动每个任务(我也只想按时间间隔检查),但还要检查没有太多其他的正在运行的任务。我还想要一种方法来返回队列中每个任务的进度。
为了提供一些背景知识,我有一个 FileSystemWatcher,它在正在创建的新文件夹上发送一个事件。然后,我想将其放入队列中以处理该文件夹,当它不再被锁定时。但同时我想防止 Process 任务的太多实例运行。
这是我所追求的一些伪代码。
private static void EventToQueue(object sender, EventArgs e)
{
ProcessQueue.Enqueue(Task, condition);
}
private static async void NewQueueObject(object sender, QueueObject e)
{
if (e.Condition && ProcessQueue.ActiveTask < 4)
{
var progress = new Progress<int>();
progress.ProgressChanged += ( s, e ) =>
{
UpdateProgress(e.Value);
};
await LongProcess(e, progress);
}
else
{
e.Delay(30);
}
}