Что делает BlockingCollection. Расположите на самом деле делают?
Это позволяет правильно удалить внутренние дескрипторы ожидания.
BlockingCollection
внутренне использует пару дескрипторов ожидания событий, которые, в свою очередь, имеют связанный собственный HANDLE
.
В частности, BlockingCollection
возвращает эти два дескриптора обратно в операционную систему, в конечном итоге (через SemaphoreSlim-> ManualResetEvent) вызывая собственный метод CloseHandle на два собственных экземпляра HANDLE
.
Быстрый взгляд на отражатель показывает, что это ...
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
- это частный SemaphoreSlim m_freeNodes;
, поэтому он освобождает SemaphoreSlim, который используется внутри.
Освобождает все ресурсы, используемые текущим экземпляром класса
BlockingCollection
. ( Источник )