ConcurrentQueue<> 中的 TryDequeue 和 TryTake 有什么区别?

问题描述 投票:0回答:1

ConcurrentQeueue<>
类中,定义了额外的方法
TryDequeue()
。但是,当它实现
IProducerConsumerCollection<>
时,它也有一个
TryTake()
方法。根据文档,他们都做同样的事情:

尝试出队

尝试删除并返回并发队列开头的对象。

尝试一下

对于 ConcurrentQueue,此操作将尝试从 ConcurrentQueue 的开头删除对象。

为什么要费心实施那个

TryDequeue
方法?

c# .net concurrency producer-consumer concurrent-queue
1个回答
5
投票

ConcurrentQueue 中的 TryDequeue 和 TryTake 有什么区别<>

根据可用的源代码,没有区别,因为

TryTake
调用
TryDequeue

/// <summary>
/// Attempts to remove and return an object from the <see cref="Concurrent.IProducerConsumerCollection{T}"/>.
/// </summary>
/// <param name="item">
/// When this method returns, if the operation was successful, <paramref name="item"/> contains the
/// object removed. If no object was available to be removed, the value is unspecified.
/// </param>
/// <returns>true if an element was removed and returned successfully; otherwise, false.</returns>
/// <remarks>For <see cref="ConcurrentQueue{T}"/>, this operation will attempt to remove the object
/// from the beginning of the <see cref="ConcurrentQueue{T}"/>.
/// </remarks>
bool IProducerConsumerCollection<T>.TryTake([MaybeNullWhen(false)] out T item) => TryDequeue(out item);

来源:https://source.dot.net/#System.Private.CoreLib/ConcurrentQueue.cs,201

为什么要费心实现 TryDequeue 方法?

TryDequeue
遵循与队列相关的预期名称约定,并且是
ConcurrentQueue<>
的本地名称。同样,
TryTake
遵循通常与生产者/消费者模式相关的命名约定。

© www.soinside.com 2019 - 2024. All rights reserved.