.net System.Threading.Tasks.Dataflow:为什么标准块类型使用列表而不是队列实现?

.net System.Threading.Tasks.Dataflow:为什么标准块类型使用列表而不是队列实现?,.net,queue,generic-list,tpl-dataflow,.net,Queue,Generic List,Tpl Dataflow,显示的调试会话来自上提供的示例程序 在System.Threading.Tasks.Dataflow中,为什么BufferBlock等标准块类型是通过列表而不是队列实现的?大多数数据流块(尤其是BufferBlock)都打算用作FIFO,但对于队列而言,弹出列表头是O(n),而不是O(1)。主要是我很好奇是否有人对这种设计的可能原理有任何见解。不要根据调试会话得出任何结论,首先检查源代码 请考虑下面的类信息: 同样,正如您所看到的,这不是基于列表的队列,而是将队列转换为用于调试的列表 最后,让我

显示的调试会话来自上提供的示例程序


在System.Threading.Tasks.Dataflow中,为什么BufferBlock等标准块类型是通过列表而不是队列实现的?大多数数据流块(尤其是
BufferBlock
)都打算用作FIFO,但对于队列而言,弹出列表头是
O(n)
,而不是
O(1)
。主要是我很好奇是否有人对这种设计的可能原理有任何见解。

不要根据调试会话得出任何结论,首先检查源代码

请考虑下面的类信息:

同样,正如您所看到的,这不是基于列表的队列,而是将队列转换为用于调试的列表


最后,让我们看看
\u messages
字段的类型。它是,它应该如何工作。

不要根据调试会话得出任何结论,首先检查源代码

请考虑下面的类信息:

同样,正如您所看到的,这不是基于列表的队列,而是将队列转换为用于调试的列表


最后,让我们看看
\u messages
字段的类型。它是,这正是它应该做的。

有趣。首先,我听说可以强制调试器显示与底层变量不同的类型。学习太多,时间太少:/它不是共同的,它是一个计算属性,你可以自己做:)如果你想了解类的内部结构,你应该检查debugger.interest中的非公共字段。首先,我听说可以强制调试器显示与底层变量不同的类型。学习太多,时间太少:/它不是共同的,它是一个计算属性,您可以自己做:)如果您想了解类的内部结构,您应该在调试器中检查非公共字段。
public IEnumerable<T> Queue { get { return _sourceDebuggingInformation.OutputQueue; } }
internal IEnumerable<TOutput> OutputQueue { get { return _source._messages.ToList(); } }