2010-07-06 34 views

Respuesta

9

Esto permite desechar correctamente los tiradores de espera internos.

BlockingCollection<T>, internamente, utiliza un par de asas evento esperar, que a su vez tienen un asociado nativa HANDLE.

Específicamente, BlockingCollection<T>.Dispose() los estrenos de las dos manijas de nuevo al sistema operativo, por el tiempo (a través de SemaphoreSlim-> ManualResetEvent) llamando a la CloseHandle método nativo en los dos casos HANDLE nativos.

-4

Libera todos los recursos utilizados por la instancia actual de la clase BlockingCollection<T>. (Source)

+2

Eso es cierto, pero vago ... –

+2

-1. Esto no es útil. –

4

Tener una mirada rápida con reflector revela esto ...

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

y m_freeNodes es private SemaphoreSlim m_freeNodes; por lo que libera la SemaphoreSlim que se utilizan internamente.

Cuestiones relacionadas