将项目发布到TPL DataFlow
时,是否有任何机制可以允许延迟发布?延迟发布到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);
但是,这似乎是消耗了一个不必要的线程,可以被链中的其他块使用。