Google OAuth2: cuándo y cómo usar el token de actualización

Tengo una aplicación c # instalada con código que funciona y obtiene el código de autorización y lo intercambia por un token de acceso. Estoy guardando el token de actualización. Sé que en algún momento necesito usarlo para obtener un nuevo token de acceso. Supongamos que periódicamente estoy llamando al siguiente método para monitorear los archivos que se han compartido con mi cuenta de Drive.

   /// <summary>
   /// Retrieve a list of File resources.
   /// </summary>
   /// <param name="service">Drive API service instance.</param>
   /// <returns>List of File resources.</returns>
   public static List<File> retrieveAllFiles(DriveService service) {
      List<File> result = new List<File>();
      FilesResource.ListRequest request = service.Files.List();
      request.Q = "sharedWithMe and trashed=false";
      do {
         try {
            FileList files = request.Fetch();

            result.AddRange(files.Items);
            request.PageToken = files.NextPageToken;
         } catch (Exception e) {
            Console.WriteLine("An error occurred: " + e.Message);
            request.PageToken = null;
         }
      } while (!String.IsNullOrEmpty(request.PageToken));
      return result;
   }
}

Supongo que en algún momento la llamada a service.Files.List () va a fallar. ¿Cómo sé que ha fallado debido a un token de acceso caducado y cuál es el código para usar el token de actualización? Ya tengo un código (abajo) que he extraído deaquí para utilizar el token de actualización. ¿Se llamará a este método cuando caduque el token de acceso?

    private static IAuthorizationState GetAuthorization(NativeApplicationClient arg)
   {
      // If we already have a RefreshToken, use that
      if (!string.IsNullOrEmpty(RefreshToken))
      {
         state.RefreshToken = RefreshToken;
         if (arg.RefreshToken(state)) {
            mTextBox.Text = "RF: " + RefreshToken;
            return state;
         }
      }
      // authCode is a TextBox on the form
      var result = arg.ProcessUserAuthorization(mTextBox.Text, state);
      RefreshToken = state.RefreshToken;
      return result;
   }

Respuestas a la pregunta(4)

Su respuesta a la pregunta