Att räkna objekten i en stor Zimbra TGZ säkerhetskopia kan ta ett tag. Om du kör räkningen på en skrivbordsapps huvudtråd eller inom en webbförfrågan, väntar allt annat tills den är klar. Aspose.Email for .NET lägger till asynkrona versioner av sina TGZ‑räkningsmetoder, så att du kan await resultatet och stoppa räkningen om den tar för lång tid.
Den här handledningen är för .NET‑utvecklare som redan använder async och await. Om du bara behöver en snabb räkning i ett konsolverktyg eller ett skript, är den vanliga versionen enklare; se Count Messages in TGZ Files with TgzReader.GetItemsCount.
Hur man räknar objekt i Zimbra TGZ‑säkerhetskopior asynkront
Det finns två asynkrona metoder: den ena returnerar det totala antalet objekt i arkivet, och den andra returnerar antalet objekt av en viss typ, såsom meddelanden eller kontakter. De returnerar samma siffror som de vanliga metoderna. Skillnaden är att din kod är fri att utföra annat arbete medan arkivet läses.
Båda metoderna accepterar också en valfri avbokningstoken. Så här lägger du till en tidsgräns, ansluter en Avbryt‑knapp eller stoppar arbetet när en webbförfrågan överges.
Kom igång med Aspose.Email
Installera Aspose.Email for .NET 26.9 eller senare från NuGet:
Install-Package Aspose.Email
Du behöver också en Zimbra TGZ-backup. Exemplen använder en fil som heter xhy.tgz.
Räkna Zimbra TGZ‑objekt asynkront
Följande program hämtar det totala antalet objekt, och räknar sedan meddelanden och kontakter.
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}");
}
}
}
Programmet skriver ut det totala antalet objekt, följt av antalet meddelanden och kontakter i säkerhetskopian.
Några saker att observera:
Mainär markeradasyncså att den kan vänta på räknarna utan att blockera.- Varje räkning avslutas innan nästa startar.
using-blocket frigör arkivfilen när alla tre räknarna är klara.
Stoppa en räkning med en timeout
För att begränsa hur länge en räkning kan köras, skapa en avbokningstoken med en tidsgräns och skicka med den. Detta exempel ger upp efter 30 sekunder:
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}");
}
Lägg till using System.Threading; för avbokningstyperna.
Den samma token fungerar för andra situationer. I en skrivbordsapp, håll token‑källan i ett fält och avbryt den när användaren klickar på Avbryt. I en ASP.NET Core‑app, skicka token som signalerar när klienten kopplas bort, så att räknaren stoppar om ingen väntar på svaret.
När en räkning avbryts, hantera den på samma sätt som du hanterar avbrott någon annanstans i din asynkrona kod, till exempel genom att visa ett meddelande eller låta användaren försöka igen.
Nästa steg
Efter räknandet kan du även exportera säkerhetskopian asynkront; exportmetoden accepterar också en avbokningstoken. Dokumentationen Arbeta med Zimbra och TgzReader API‑referens täcker de andra sakerna du kan göra med en TGZ‑säkerhetskopia. Om du har frågor, ställ dem på Aspose.Email support forum.
FAQs
Varför räkna asynkront? Medan arkivet läses kan din applikation fortsätta med annat arbete. En skrivbordsapp förblir responsiv, och en webbserver binder inte upp en tråd i väntan.
Kan jag avbryta en räkning som tar för lång tid? Ja. Båda asynkrona räknemetoderna accepterar en valfri avbokningstoken.
Vilka objekttyper kan jag räkna? Meddelanden, kontakter, kalenderobjekt och uppgifter.
Behövs en avbokningstoken? Nej. Den är valfri. Om du inte skickar med en, fortsätter räknaren tills den är klar.
Behöver jag disposera läsaren? Ja. Använd ett
using-block så att arkivfilen frigörs när du är klar.
Skaffa en gratis licens och utforska mer
Begär en gratis tillfällig licens för att testa Aspose.Email for .NET utan utvärderingsrestriktioner.
