BlockingCollection.Dispose方法实际上是做什么的?
这使得内部的等待句柄可以被正确地处理和释放。
BlockingCollection<T>
在内部使用一对事件等待句柄,这些句柄又有关联的本地 HANDLE
。
具体而言,BlockingCollection<T>.Dispose()
释放这两个句柄回操作系统,最终(通过 SemaphoreSlim->ManualResetEvent)在两个本地 HANDLE
实例上调用本地的 CloseHandle 方法。
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。