内部条件に基づいて各タスクを開始するタスクキューの理想的/スレッドセーフな実装を探しています(これも一定の間隔でチェックしたいだけです)が、他にあまり多くないことも確認します実行中のタスク。また、キュー内の各タスクの進行状況を返す方法も必要です。
背景を説明するために、作成中の新しいフォルダーでイベントを送信する FileSystemWatcher があります。次に、ロックが解除されたときに、これをキューに入れてフォルダーを処理したいと考えています。しかし同時に、Process タスクのインスタンスが多すぎて実行されないように保護したいと考えています。
Heresは、私が求めているもののいくつかの疑似コードです。
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);
}
}