用任务阻塞队列

时间:2015-03-07 05:35:26

标签: c# .net task-parallel-library

问题: 我有文件系统,文件出现,我想通过WCF上传它们。我想要的是将最大并行数限制为某些 ThreadMaxConcurrency

想法是在blockingQueue中使用Producer-Consumer模式。制作部分是 - UploadNewFile,CreateFolder等......

我所看到的是消费者的一部分。 另外我不知道的是某种......延迟单一任务 - 举个例子 - DONT在FolderWasCreated之前上传新文件。

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

1 个答案:

答案 0 :(得分:2)

您应该使用TPL Dataflow这是一个为您完成所有这些工作的框架。您创建了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;