BlockingCollection.Dispose实际上做了什么?
答案 0 :(得分:11)
这允许正确处理内部等待句柄。
BlockingCollection<T>
在内部使用一对事件等待句柄,而这些句柄又具有关联的本机HANDLE
。
具体来说,BlockingCollection<T>.Dispose()
将这两个句柄释放回操作系统,最终(通过SemaphoreSlim-&gt; ManualResetEvent)在两个本地HANDLE
实例上调用本机CloseHandle方法。
答案 1 :(得分:4)
快速浏览反射器可以发现这一点...
protected virtual void Dispose(bool disposing)
{
if (!this.m_isDisposed)
{
if (this.m_freeNodes != null)
{
this.m_freeNodes.Dispose();
}
this.m_occupiedNodes.Dispose();
this.m_isDisposed = true;
}
}
和m_freeNodes
为private SemaphoreSlim m_freeNodes;
因此它会释放内部使用的SemaphoreSlim。
答案 2 :(得分:-7)
释放
BlockingCollection<T>
类的当前实例使用的所有资源。 (Source)