正在阻止具有任务的队列

本文关键字:任务 队列 | 更新日期: 2024-10-21 20:50:44

问题:我有文件显示的文件系统,我想通过WCF上传它们。我想要的是将最大并行数限制在一些ThreadMaxConcurrent

想法是在blockingQueue中使用生产者-消费者模式。生产部分是-上传新文件,创建文件夹等…

我对消费者部分视而不见。还有我不知道的是。。。延迟单个任务-例如,在FolderWasCreated之前不要上传新文件。

我使用的是.NET 4.5,我不知道如何利用BlockingQueue,如何正确监控是否有任务,如何监控,以及如何将一些任务推迟到另一个任务完成(我想再次将它们排到最后会起作用)。

正在阻止具有任务的队列

您应该使用TPL数据流,它是一个为您完成所有这些的框架。创建一个AcionBlock,给它一个委托,并将其设置为MaxDegreeOfParallelism

它应该看起来像这样:

var block = new ActionBlock<string>(folderName => 
{
    UploadFolder(folderName);
}, new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 5 });
foreach (var folderName in GetFolderNames())
{
    block.Post(folderName);
}
block.Complete();
await block.Completion;