¿Por qué deberíamos llamar a SuppressFinalize cuando no tenemos un destructor?

Tengo pocas preguntas para las que no puedo obtener una respuesta adecuada.

1) ¿Por qué deberíamos llamar a SuppressFinalize en la función Dispose cuando no tenemos un destructor?

2) Desechar y finalizar se utilizan para liberar recursos antes de que el objeto se recolecte basura. Ya sea que se trate de un recurso administrado o no administrado, debemos liberarlo, entonces, ¿por qué necesitamos una condición dentro de la función de disposición, que dice pasar 'verdadero' cuando llamamos a esta función anulada desde IDisposable? Deseche y pase falso cuando se llama desde una finalización.

Vea el siguiente código que copié de la red.

class Test : IDisposable
   {
     private bool isDisposed = false;

     ~Test()
     {
       Dispose(false);
     }

     protected void Dispose(bool disposing)
     {
       if (disposing)
       {
         // Code to dispose the managed resources of the class
       }
       // Code to dispose the un-managed resources of the class

       isDisposed = true;
     }

     public void Dispose()
     {
       Dispose(true);
       GC.SuppressFinalize(this);
     }
   }

¿Qué sucede si elimino la función de eliminación protegida booleana e implemento la siguiente?

   class Test : IDisposable
   {
     private bool isDisposed = false;

     ~Test()
     {
       Dispose();
     }


     public void Dispose()
     {
      // Code to dispose the managed resources of the class
      // Code to dispose the un-managed resources of the class
      isDisposed = true;

      // Call this since we have a destructor . what if , if we don't have one 
       GC.SuppressFinalize(this);
     }
   }       

Respuestas a la pregunta(5)

Su respuesta a la pregunta