我正在使用具有 T 类型的类的 BlockingCollection,我想知道是否应该将 T 转换为结构。
从 BlockingCollection 签名原则上我看不出有什么问题:
[DebuggerDisplay("Count = {Count}, Type = {m_collection}")]
[ComVisible(false)]
[DebuggerTypeProxy(typeof (SystemThreadingCollections_BlockingCollectionDebugView<>))]
[HostProtection(SecurityAction.LinkDemand, ExternalThreading = true, Synchronization = true)]
public class BlockingCollection<T> : IEnumerable<T>, ICollection, IEnumerable, IDisposable
但是,支持取消的阻塞操作的语义是,如果在元素可用之前取消操作,则返回 null。这里的问题是一个结构不能为null,所以下面的代码是无效的
Struct myStruct = collection.Take(cancellationToken);
if(myStruct!=null) ... code
因此,阻塞集合是否仅限于类,或者语义更改是否返回未初始化的结构?