我在TryPopRange ConcurrentStack方法中找到了一个双重标准。方法的名称TryPopRange说,它使用TryXXX模式,这不应该给你例外。但是TryPopRange方法可以抛出3个不同的异常(ArgumentEx,ArgumentNullEx,ArgumentOutOfRangeEx(。好的,检查传入的参数是正常的。但是,如果并发堆栈为空,我将有异常。如果一个线程将读取所有数据,并且我的线程将使用 TryPopRange 方法,则我的读取尝试将只有例外。
我能理解,他们为什么要这样做??
你指的是TryPopRange
的这种过载吗?
public int TryPopRange(T[] items, int startIndex, int count);
// Exceptions:
// T:System.ArgumentNullException:
// items is a null reference (Nothing in Visual Basic).
//
// T:System.ArgumentOutOfRangeException:
// startIndex or count is negative. Or startIndex is greater than or equal to the
// length of items.
//
// T:System.ArgumentException:
// startIndex + count is greater than the length of items.
这些异常与 ConcurrentStack
集合中的项数无关,而是与提供的 T[] items
参数的大小有关。应将一致的值作为参数传递,因此不能传递大小为 10 的 items
数组和大小为 11 的startIndex
数组。