將項目發佈到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);
但是,這似乎是消耗了一個不必要的線程,可以被鏈中的其他塊使用。