BlockingCollection.Dispose实际上做了什么?

时间:2010-07-06 17:21:44

标签: .net .net-4.0

BlockingCollection.Dispose实际上做了什么?

3 个答案:

答案 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_freeNodesprivate SemaphoreSlim m_freeNodes;因此它会释放内部使用的SemaphoreSlim。

答案 2 :(得分:-7)

  

释放BlockingCollection<T>类的当前实例使用的所有资源。 (Source