Что на самом деле делает BlockingCollection.Dispose? - PullRequest
8 голосов
/ 06 июля 2010

Что на самом деле делает BlockingCollection.Dispose?

Ответы [ 3 ]

11 голосов
/ 06 июля 2010

Это позволяет правильно утилизировать внутренние ручки ожидания.

BlockingCollection<T>, внутренне, использует пару дескрипторов ожидания события, которые, в свою очередь, имеют связанный собственный HANDLE.

В частности, BlockingCollection<T>.Dispose() возвращает эти два дескриптора обратно в операционную систему, в конечном итоге (через SemaphoreSlim-> ManualResetEvent) вызывая собственный CloseHandle метод для двух собственных HANDLE экземпляров.

4 голосов
/ 06 июля 2010

Быстрый взгляд с отражателем показывает, что ...

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, который используется внутри.

0 голосов
/ 06 июля 2010

Освобождает все ресурсы, используемые текущим экземпляром класса BlockingCollection<T>. ( Источник )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...