Das Zählen der Elemente in einem großen Zimbra TGZ Backup kann eine Weile dauern. Wenn Sie das Zählen im Hauptthread einer Desktop‑Anwendung oder innerhalb einer Web‑Anfrage ausführen, wartet alles andere, bis es abgeschlossen ist. Aspose.Email for .NET fügt asynchrone Versionen seiner TGZ‑Zählmethoden hinzu, sodass Sie das Ergebnis awaiten können und das Zählen stoppen können, wenn es zu lange dauert.
Dieses Tutorial richtet sich an .NET‑Entwickler, die bereits async und await verwenden. Wenn Sie nur eine schnelle Zählung in einem Konsolen‑Tool oder Skript benötigen, ist die reguläre Version einfacher; siehe Count Messages in TGZ Files with TgzReader.GetItemsCount.
Wie man Elemente in Zimbra TGZ-Backups asynchron zählt
Es gibt zwei asynchrone Methoden: Die eine gibt die Gesamtzahl der Elemente im Archiv zurück, und die andere gibt die Anzahl der Elemente eines Typs zurück, z. B. Nachrichten oder Kontakte. Sie geben dieselben Zahlen wie die regulären Methoden zurück. Der Unterschied besteht darin, dass Ihr Code während des Lesens des Archivs andere Aufgaben ausführen kann.
Beide Methoden akzeptieren ebenfalls ein optionales Cancellation‑Token. So können Sie ein Timeout hinzufügen, einen Abbrechen‑Button verbinden oder die Arbeit beenden, wenn eine Webanforderung aufgegeben wird.
Erste Schritte mit Aspose.Email
Installieren Sie Aspose.Email for .NET 26.9 oder eine neuere Version von NuGet:
Install-Package Aspose.Email
Sie benötigen außerdem ein Zimbra TGZ-Backup. Die Beispiele verwenden eine Datei mit dem Namen xhy.tgz.
Zähle Zimbra TGZ-Elemente asynchron
Das folgende Programm ermittelt die Gesamtzahl der Elemente und zählt anschließend Nachrichten und Kontakte.
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}");
}
}
}
Das Programm gibt die Gesamtzahl der Elemente aus, gefolgt von der Anzahl der Nachrichten und Kontakte im Backup.
Einige Dinge, die zu beachten sind:
Mainist alsasyncmarkiert, damit es auf die Zählungen warten kann, ohne zu blockieren.- Jede Zählung wird abgeschlossen, bevor die nächste beginnt.
- Der
using-Block gibt die Archivdatei frei, sobald alle drei Zählungen abgeschlossen sind.
Zählen mit einem Timeout stoppen
Um die Laufzeit einer Zählung zu begrenzen, erstellen Sie ein Cancellation‑Token mit einem Zeitlimit und übergeben es. Dieses Beispiel gibt nach 30 Sekunden auf:
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}");
}
Fügen Sie using System.Threading; für die Abbruchtypen hinzu.
Das gleiche Token funktioniert in anderen Situationen. In einer Desktop‑App behalten Sie die Token‑Quelle in einem Feld und brechen sie ab, wenn der Benutzer auf Cancel klickt. In einer ASP.NET Core app übergeben Sie das Token, das signalisiert, wenn der Client die Verbindung trennt, sodass die Zählung stoppt, wenn niemand auf die Antwort wartet.
Wenn ein Zähler abgebrochen wird, behandeln Sie ihn so, wie Sie die Abbruchbehandlung an anderer Stelle in Ihrem asynchronen Code handhaben, zum Beispiel indem Sie eine Meldung anzeigen oder dem Benutzer einen erneuten Versuch ermöglichen.
Nächste Schritte
Nach dem Zählen können Sie das Backup auch asynchron exportieren; die Exportmethode akzeptiert ebenfalls ein Cancellation Token. Die Dokumentation Working with Zimbra und die TgzReader API reference behandeln die anderen Dinge, die Sie mit einem TGZ‑Backup tun können. Wenn Sie Fragen haben, stellen Sie sie im Aspose.Email support forum.
FAQs
Warum asynchron zählen? Während das Archiv gelesen wird, kann Ihre Anwendung andere Aufgaben weiter ausführen. Eine Desktop‑App bleibt reaktionsfähig, und ein Web‑Server bindet keinen Thread, der nur wartet.
Kann ich einen Zählvorgang abbrechen, der zu lange dauert? Ja. Beide asynchronen Zählmethoden akzeptieren ein optionales Cancellation‑Token.
Welche Elementtypen kann ich zählen? Nachrichten, Kontakte, Kalenderelemente und Aufgaben.
Ist ein Abbruch‑Token erforderlich? Nein. Es ist optional. Wenn Sie keinen übergeben, läuft die Zählung bis zum Abschluss.
Muss ich den Reader freigeben? Ja. Verwenden Sie einen
using-Block, damit die Archivdatei freigegeben wird, wenn Sie fertig sind.
Holen Sie sich eine kostenlose Lizenz und entdecken Sie mehr
Fordern Sie eine kostenlose temporäre Lizenz an, um Aspose.Email for .NET ohne Evaluierungsbeschränkungen zu testen.
