Google OAuth2: Kiedy i jak używać tokena odświeżania

Mam zainstalowaną aplikację c # z działającym kodem, która pobiera kod autoryzacji i wymienia go na token dostępu. Przechowuję token odświeżania. Wiem, że w pewnym momencie muszę go użyć, aby uzyskać nowy token dostępu. Załóżmy, że okresowo wywołuję następującą metodę monitorowania plików udostępnionych na moim koncie 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;
   }
}

Zakładam, że w pewnym momencie wywołanie service.Files.List () zakończy się niepowodzeniem. Skąd mam wiedzieć, że nie powiodło się z powodu wygasłego tokena dostępu i jaki jest kod do używania tokena odświeżania? Mam już jakiś kod (poniżej), który zebrałemtutaj użyć tokena odświeżania. Czy ta metoda zostanie wywołana, gdy wygasa token dostępu?

    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