在什么情况下ConcurrentBag.TryTake()失败?

em7*_*m70 11 .net c# collections concurrency

我正在考虑在我正在编写的程序中使用ConcurrentBag,但是我似乎无法在TryTake上找到足够的文档.

我知道该方法可能会失败,但我无法找到可能发生此类失败的情况的解释,以及失败后收集将保留的状态.

如果它只是在另一个线程已经删除了该项目的情况下,那么我不在乎,但我无法承受的是我想要移除的项目仍然在通话后仍然在集合中.

这可能是这样吗?

Tim*_*oyd 3

根据文档,如果没有可用的物品(即袋子是空的),则返回 false。由于它是一个线程安全的集合,因此不应该存在“空”和多个线程的问题。

您必须考虑文档result Treturn value考虑以下因素:

result T:当此方法返回时,结果包含从 ConcurrentBag 中删除的对象,如果包为空,则结果包含 T 的默认值。

返回:如果成功删除对象,则返回 true;否则为假。

http://msdn.microsoft.com/en-us/library/dd287255.aspx