【发布时间】:2017-08-07 16:58:57
【问题描述】:
将项目发布到TPL DataFlow 时,是否有任何机制可以允许延迟发布?
public partial class BasicDataFlowService
{
private readonly ActionBlock<string> workerBlock;
public BasicDataFlowService()
{
workerBlock = new ActionBlock<string>(file => DoWork(file), new ExecutionDataflowBlockOptions()
{
MaxDegreeOfParallelism = 32
});
}
partial void DoWork(string fileName);
private void AddToDataFlow(string file)
{
workerBlock.Post(file);
}
}
在AddToDataFlow 内,我希望能够在处理项目之前指定延迟(例如,如果我们决定将处理延迟 30 秒)。
我确实考虑过使用TransFormBlock 和new System.Threading.ManualResetEvent(false).WaitOne(1000);,例如
var requeueBlock = new TransformBlock<string, string>(file =>
{
new System.Threading.ManualResetEvent(false).WaitOne(1000);
return file;
});
requeueBlock.LinkTo(workerBlock);
但是,这似乎会不必要地消耗一个线程,而该线程可能会被链中的其他块使用。
【问题讨论】:
标签: c# tpl-dataflow dataflow