Compter les éléments d’une grande sauvegarde Zimbra TGZ peut prendre un certain temps. Si vous exécutez le comptage sur le thread principal d’une application de bureau ou à l’intérieur d’une requête web, tout le reste attend qu’il se termine. Aspose.Email for .NET ajoute des versions asynchrones de ses méthodes de comptage TGZ, de sorte que vous pouvez await le résultat et arrêter le comptage s’il dure trop longtemps.

Ce tutoriel s’adresse aux développeurs .NET qui utilisent déjà async et await. Si vous avez seulement besoin d’un comptage rapide dans un outil console ou un script, la version standard est plus simple ; voir Count Messages in TGZ Files with TgzReader.GetItemsCount.

Comment compter les éléments dans les sauvegardes TGZ de Zimbra de manière asynchrone

Il existe deux méthodes asynchrones : l’une renvoie le nombre total d’éléments dans l’archive, et l’autre renvoie le nombre d’éléments d’un type donné, tel que les messages ou les contacts. Elles renvoient les mêmes nombres que les méthodes normales. La différence est que votre code est libre d’effectuer d’autres tâches pendant que l’archive est lue.

Les deux méthodes acceptent également un jeton d’annulation facultatif. C’est ainsi que vous ajoutez un délai d’attente, connectez un bouton Annuler ou arrêtez le travail lorsqu’une requête Web est abandonnée.

Premiers pas avec Aspose.Email

Installez Aspose.Email for .NET 26.9 ou version ultérieure à partir de NuGet:

Install-Package Aspose.Email

Vous avez également besoin d’une sauvegarde Zimbra TGZ. Les exemples utilisent un fichier nommé xhy.tgz.

Compter les éléments TGZ de Zimbra de manière asynchrone

Le programme suivant obtient le nombre total d’éléments, puis compte les messages et les contacts.

using System;
using System.Threading.Tasks;
using Aspose.Email.Storage.Zimbra;

class Program
{
    static async Task Main()
    {
        var fileName = "xhy.tgz";
        using (var reader = new TgzReader(fileName))
        {
            int totalItems = await reader.GetTotalItemsCountAsync();
            int numberOfMessages = await reader.GetItemsCountAsync(ItemType.Message);
            int numberOfContacts = await reader.GetItemsCountAsync(ItemType.Contact);

Console.WriteLine($"Total items: {totalItems}");
            Console.WriteLine($"Messages: {numberOfMessages}");
            Console.WriteLine($"Contacts: {numberOfContacts}");
        }
    }
}

Le programme affiche le nombre total d’éléments, suivi du nombre de messages et de contacts dans la sauvegarde.

Quelques points à remarquer :

  • Main est marqué async afin qu’il puisse attendre les comptages sans bloquer.
  • Chaque comptage se termine avant que le suivant ne commence.
  • Le bloc using libère le fichier d’archive une fois que les trois comptages sont terminés.

Arrêter un compte avec un délai d’attente

Pour limiter la durée d’exécution d’un comptage, créez un jeton d’annulation avec une limite de temps et transmettez‑le. Cet exemple abandonne après 30 secondes :

using (var cts = new CancellationTokenSource(TimeSpan.FromSeconds(30)))
using (var reader = new TgzReader("xhy.tgz"))
{
    int numberOfMessages = await reader.GetItemsCountAsync(ItemType.Message, cts.Token);
    Console.WriteLine($"Messages: {numberOfMessages}");
}

Ajoutez using System.Threading; pour les types d’annulation.

Le même jeton fonctionne pour d’autres situations. Dans une application de bureau, conservez la source du jeton dans un champ et annulez‑le lorsque l’utilisateur clique sur Annuler. Dans une application ASP.NET Core, transmettez le jeton qui signale la déconnexion du client, afin que le comptage s’arrête si personne n’attend la réponse.

Lorsqu’un comptage est annulé, gérez-le de la même manière que vous gérez les annulations ailleurs dans votre code asynchrone, par exemple en affichant un message ou en laissant l’utilisateur réessayer.

Prochaines étapes

Après le comptage, vous pouvez également exporter la sauvegarde de manière asynchrone ; la méthode d’exportation accepte également un jeton d’annulation. La documentation Travailler avec Zimbra et la référence API TgzReader couvrent les autres choses que vous pouvez faire avec une sauvegarde TGZ. Si vous avez des questions, demandez sur le forum de support Aspose.Email.

FAQ

  1. Pourquoi compter de manière asynchrone ? Pendant que l’archive est en cours de lecture, votre application peut continuer à effectuer d’autres tâches. Une application de bureau reste réactive, et un serveur web ne bloque pas un thread en attente.

  2. Puis-je annuler un comptage qui prend trop de temps ?
    Oui. Les deux méthodes de comptage asynchrones acceptent un jeton d’annulation facultatif.

  3. Quels types d’éléments puis-je compter ? Messages, contacts, éléments de calendrier et tâches.

  4. Un jeton d’annulation est‑il requis ? Non. C’est facultatif. Si vous n’en fournissez pas, le comptage s’exécute jusqu’à son terme.

  5. Dois‑je disposer du lecteur ?
    Oui. Utilisez un bloc using afin que le fichier d’archive soit libéré lorsque vous avez terminé.

Obtenez une licence gratuite et explorez davantage

Demandez une licence temporaire gratuite pour tester Aspose.Email for .NET sans restrictions d’évaluation.

Voir aussi