C# 如何在TPL数据流中设置/获取/使用块的名称?

C# 如何在TPL数据流中设置/获取/使用块的名称?,c#,.net,task-parallel-library,tpl-dataflow,C#,.net,Task Parallel Library,Tpl Dataflow,显示在DataflowBlockOptions类上有一个NameFormat属性,描述如下: 获取或设置在查询块的名称时要使用的格式字符串 所以。。。如何设置名称?这个名字是怎么用的?什么时候用 或者。。。正如我所怀疑的。。。这仅仅是没有真正实现的设计的残余吗?您没有设置名称,而是设置了最终会产生名称的名称(当然,您可以忽略参数并设置任何您想要的内容,如NameFormat=“bar”)。您可以使用ToString获取名称,例如: var block = new ActionBlock<i

显示在
DataflowBlockOptions
类上有一个
NameFormat
属性,描述如下:

获取或设置在查询块的名称时要使用的格式字符串

所以。。。如何设置名称?这个名字是怎么用的?什么时候用


或者。。。正如我所怀疑的。。。这仅仅是没有真正实现的设计的残余吗?

您没有设置名称,而是设置了最终会产生名称的名称(当然,您可以忽略参数并设置任何您想要的内容,如
NameFormat=“bar”
)。您可以使用
ToString
获取名称,例如:

var block = new ActionBlock<int>(_ => { }, new ExecutionDataflowBlockOptions
{
    NameFormat = "The name format may contain up to two format items. {0} will be substituted with the block's name. {1} will be substituted with the block's Id, as is returned from the block's Completion.Id property."
});

Console.WriteLine(block.ToString());

我没有对此进行测试-但这不是有文档记录的吗:“名称格式最多可以包含两个格式项。{0}将被块的名称替换。{1}将被块的Id替换,这是从块的Completion.Id属性返回的。”-这很尴尬,但是在查看DataflowBlockOptions属性页面时,我并没有想到单击NameFormat来查看该页面所说的内容,因为在我看来,该页面已经完成了。现在我学得更好了!啊!它不是块的某个用户定义标识符。。。它就像类名一样。所以你不能用这种方式区分你从TransformBlock创建的不同块,除非是通过它们的数字ID。数据流块是密封的(这一直让我很恼火),所以你不能通过从它派生来改变它。)谢谢@davidbak在我看来,数字Id是区分物品的最佳方式,但没错。天哪,我只是用棍棒打了自己的头,弄明白了你想告诉我什么。谢谢@i3arnon使用数字Id区分块是什么意思?据我所知,与特定块关联的完成Id可能会更改,我错了吗?我实现了一个帮助构建数据流管道的简单类,该类只公开创建的IDataflowBlock列表。我试图找到一种方法来测试这个类,以确保每个块都是我创建的。我唯一能想到的就是使用ToString并与我给出的NameFormat进行比较it@JoãoGonçalves与块实例关联的id不会改变AFAIK。如果创建另一个实例,它将获得不同的Id。
return string.Format(options.NameFormat, block.GetType().Name, block.Completion.Id);