我正在考虑在我正在编写的程序中使用ConcurrentBag,但我似乎无法在TryTake上找到足够的文档。
我知道该方法可能会失败,但我无法找到可能发生此类失败的案例的解释,以及失败后收集将保留的状态。
如果只是在另一个线程已经删除了该项目的情况下,那么我不在乎,但我真正负担不起的是我想删除的项目仍然在通话后仍然在集合中。
这可能是这种情况吗?
答案 0 :(得分:3)
如果没有可用的物品,那么从文件中它返回false,即行李是空的。因为它是一个线程安全的集合,所以“空”和多个线程之间应该没有问题。
您必须考虑result T
以及return value
的文档:
结果T:当此方法返回时,result包含从ConcurrentBag中删除的对象,如果包为空,则包含默认值T.
返回:如果成功删除了某个对象,则返回true;否则,错误。
答案 1 :(得分:3)
鉴于你正在处理多线程,在TryTake
决定返回false(并设置)的那一刻,没有什么可以阻止将一个项目添加到包中的另一个线程它是default(T)
)的返回值,以及调用TryTake
实际返回代码的时刻。
因此,当您能够处理错误结果时,包中可能会有一个项目。