タイプ 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
したがって、ブロッキング コレクションはクラスに限定されているのでしょうか、それともセマンティックの変更によって初期化されていない構造体が返されるのでしょうか?