Документация класса BlockingCollection<T>
имеет следующее примечание:
Always call Dispose before you release your last reference to the
BlockingCollection<T>. Otherwise, the resources it is using will not be freed
until the garbage collector calls the BlockingCollection<T> object's Finalize
method.
И внутренняя реализация из BlockingCollection<T>
в C # имеет следующий метод:
/// <summary>
/// Releases resources used by the <see cref="T:System.Collections.Concurrent.BlockingCollection{T}"/> instance.
/// </summary>
/// <param name="disposing">Whether being disposed explicitly (true) or due to a finalizer (false).</param>
protected virtual void Dispose(bool disposing)
Существует только один вызов этого Dispose
с аргументом disposing: true
и подавлением завершения после вызова. Но, что удивительно для меня, в классе нет явного финализатора, и даже нет вызова Dispose(false)
.
Похоже, функция Dispose
относительно проста, и она просто удаляет ссылки на разные объекты для ускорения GC. В этом случае GC сделает эту работу за нас, если мы забудем явно вызвать Dispose()
.
Может ли кто-нибудь заметить свет на внутренностях этого класса? Какова цель метода Dispose(bool disposing)
? Является ли обычной практикой применение этого метода для основных библиотек .NET даже в тех случаях, когда он не нужен?