What does BlockingCollection.Dispose actually do?

橙三吉。 提交于 2019-12-05 21:38:14

问题


What does BlockingCollection.Dispose actually do?


回答1:


This allows the internal wait handles to be disposed of properly.

BlockingCollection<T>, internally, uses a pair of event wait handles, which in turn have an associated native HANDLE.

Specifically, BlockingCollection<T>.Dispose() releases these two handles back to the operating system, by eventually (through SemaphoreSlim->ManualResetEvent) calling the native CloseHandle method on the two native HANDLE instances.




回答2:


Having a quick look with reflector reveals this...

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;
    }
}

and m_freeNodes is private SemaphoreSlim m_freeNodes; so it releases the SemaphoreSlim that are used internally.




回答3:


Releases all resources used by the current instance of the BlockingCollection<T> class. (Source)



来源:https://stackoverflow.com/questions/3188601/what-does-blockingcollection-dispose-actually-do

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!