.NET 6 PriorityQueue 是线程安全的吗?

Is .NET 6 PriorityQueue thread-safe?

.NET 6 现在有非常有用的 PriorityQueue<TElement,TPriority>。该文档还不是很清楚(在提出问题时,文档仍然是针对 RC1 的)它是否是线程安全的。两件事:

我可以在没有 wrapping/locking 的多线程环境中使用它吗(例如在 ASP.NET 核心网站中)?我不知道的任何并发等效项(如果可能,我尽量不使用第 3 方包)?

例如,查看 PriorityQueue.Enqueuesource code,可以立即看出代码 不是 线程安全的:

public void Enqueue(TElement element, TPriority priority)
{
    // Virtually add the node at the end of the underlying array.
    // Note that the node being enqueued does not need to be physically placed
    // there at this point, as such an assignment would be redundant.

    int currentSize = _size++; // <-- BOOM

The document is not very clear yet

确实如此。 .NET 中的任何内容都不是线程安全的,除非在文档中明确提及。期间.

线程安全会带来(显着的)性能开销,尤其是在一般情况下(即不假设特定用途)。因此,“以防万一”使所有线程安全是非常愚蠢的。因此,.NET 中的一般概念(从 1.0 开始)就是没有什么是线程安全的,除非在文档中明确提及。

如您所说,文档中没有提到线程安全。因此,非常清楚不是线程安全的。