我创建了类似于网络爬虫的东西来创建我需要管理的 1000 多个 Web 服务的报告。因此,我创建了一个 TPL 数据流管道来管理获取和处理数据。我想象的管道看起来有点像这样(对不起我的绘画技巧:D):

我已经创建了一个实现并且一切正常,直到我开始作为一个整体开始我的管道。我将 500 个对象作为管道的输入提供给管道,并希望程序运行一段时间,但程序在移动到执行块后停止执行。在检查程序的流程后,在我看来,完成快速传播到处置块。我使用相同的管道创建了一个小示例项目,以检查它是我对输入类的实现还是管道本身。示例代码是这样的:
public class Job
{
public int Ticker { get; set; }
public Type Type { get; }
public Job(Type type)
{
Type = type;
}
public Task Prepare()
{
Console.WriteLine("Preparing");
Ticker = 0;
return Task.CompletedTask;
}
public Task Tick()
{
Console.WriteLine("Ticking");
Ticker++;
return Task.CompletedTask;
}
public bool IsCommitable()
{
Console.WriteLine("Trying to commit");
return IsFinished() || ( Ticker != 0 && Ticker % 100000 == 0);
}
public bool IsFinished()
{ …Run Code Online (Sandbox Code Playgroud)