Google OAuth2: quando e como usar o token de atualização

Eu tenho um aplicativo c # instalado com código de trabalho que recebe o código de autorização e troca-o por um token de acesso. Estou armazenando o token de atualização. Eu sei que em algum momento preciso usá-lo para obter um novo token de acesso. Vamos supor que eu esteja chamando periodicamente o método a seguir para monitorar os arquivos que foram compartilhados com minha conta do 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;
   }
}

Eu suponho que em algum momento a chamada para service.Files.List () irá falhar. Como sei que houve falha devido a um token de acesso expirado e qual é o código para usar o token de atualização? Eu já tenho algum código (abaixo) que eu pegueiAqui para usar o token de atualização. Este método será chamado quando o token de acesso expirar?

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

questionAnswers(4)

yourAnswerToTheQuestion