任务阻塞队列
Blocking queue with task
问题:
我有文件出现的文件系统,我想通过 WCF 上传它们。我想要的是将最大并行数限制为某些 ThreadMaxConcurrency
想法是在 blockingQueue 中使用 Producer-Consumer 模式。制作部分是 - UploadNewFile、CreateFolder 等...
我看不到的是消费者部分。
另外我不知道的是某种......延迟单一任务 -
例如 - 不要在 FolderWasCreated 之前上传新文件。
我正在使用 .NET 4.5,我不知道如何使用 BlockingQueue 以及如何正确监控是否有任务以及如何监控以及如何推迟一些任务直到另一个任务完成(再次将它们排到最后会我猜是工作)。
您应该使用 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;
问题: 我有文件出现的文件系统,我想通过 WCF 上传它们。我想要的是将最大并行数限制为某些 ThreadMaxConcurrency
想法是在 blockingQueue 中使用 Producer-Consumer 模式。制作部分是 - UploadNewFile、CreateFolder 等...
我看不到的是消费者部分。 另外我不知道的是某种......延迟单一任务 - 例如 - 不要在 FolderWasCreated 之前上传新文件。
我正在使用 .NET 4.5,我不知道如何使用 BlockingQueue 以及如何正确监控是否有任务以及如何监控以及如何推迟一些任务直到另一个任务完成(再次将它们排到最后会我猜是工作)。
您应该使用 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;