Počítání položek ve velké záloze Zimbra TGZ může trvat delší dobu. Pokud spustíte počítání na hlavním vlákně desktopové aplikace nebo uvnitř webového požadavku, vše ostatní čeká, dokud nedokončí. Aspose.Email for .NET přidává asynchronní verze svých metod pro počítání TGZ, takže můžete await výsledek a zastavit počítání, pokud běží příliš dlouho.

Tento tutoriál je určen pro vývojáře .NET, kteří již používají async a await. Pokud potřebujete jen rychlé spočítání v konzolovém nástroji nebo skriptu, je jednodušší běžná verze; viz Count Messages in TGZ Files with TgzReader.GetItemsCount.

Jak asynchronně spočítat položky v TGZ zálohách Zimbra

Existují dvě asynchronní metody: jedna vrací celkový počet položek v archivu a druhá vrací počet položek jednoho typu, například zpráv nebo kontaktů. Vrací stejné čísla jako běžné metody. Rozdíl spočívá v tom, že váš kód může provádět další práci, zatímco se archiv čte.

Obě metody také přijímají volitelný token pro zrušení. To je způsob, jak přidat časový limit, připojit tlačítko Zrušit nebo zastavit práci, když je webový požadavek opuštěn.

Začínáme s Aspose.Email

Nainstalujte Aspose.Email for .NET 26.9 nebo novější z NuGet:

Install-Package Aspose.Email

Také potřebujete zálohu Zimbra TGZ. Příklady používají soubor pojmenovaný xhy.tgz.

Počítání položek Zimbra TGZ asynchronně

Následující program získá celkový počet položek a poté spočítá zprávy a kontakty.

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

Program vytiskne celkový počet položek, následovaný počtem zpráv a kontaktů v záloze.

Několik věcí, na které je třeba si všimnout:

  • Main je označen jako async, takže může čekat na počty bez blokování.
  • Každý počet se dokončí před tím, než začne další.
  • Blok using uvolní archivní soubor, jakmile jsou všechny tři počty dokončeny.

Zastavit čítání s časovým limitem

Chcete‑li omezit, jak dlouho může běžet počítání, vytvořte token pro zrušení s časovým limitem a předávejte jej. Tento příklad se vzdá po 30 sekundách:

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

Přidejte using System.Threading; pro typy zrušení.

Stejný token funguje i v dalších situacích. V desktopové aplikaci uchovejte zdroj tokenu v poli a zrušte jej, když uživatel klikne na Zrušit. V aplikaci ASP.NET Core předávejte token, který signalizuje, když se klient odpojí, aby se čítání zastavilo, pokud nikdo nečeká na odpověď.

Když je počítání zrušeno, zacházejte s ním tak, jak zacházíte se zrušením jinde ve vašem asynchronním kódu, například zobrazením zprávy nebo umožněním uživateli to zkusit znovu.

Další kroky

Po spočítání můžete také asynchronně exportovat zálohu; metoda exportu také přijímá token pro zrušení. Dokumentace Práce se Zimbrou a Reference API TgzReader pokrývají další možnosti, které můžete s TGZ zálohou provést. Pokud máte otázky, zeptejte se na Aspose.Email support forum.

Často kladené otázky

  1. Proč počítat asynchronně? Zatímco se archiv čte, může vaše aplikace pokračovat v dalších úkolech. Desktopová aplikace zůstává responzivní a webový server nezatěžuje vlákno čekáním.

  2. Mohu zrušit výpočet, který trvá příliš dlouho? Ano. Obě asynchronní metody počítání přijímají volitelný token pro zrušení.

  3. Jaké typy položek mohu počítat? Zprávy, kontakty, položky kalendáře a úkoly.

  4. Je nutný token pro zrušení? Ne. Je volitelný. Pokud jej nepředáte, počítání proběhne do konce.

  5. Musím uvolnit čtečku? Ano. Použijte blok using, aby byl archivní soubor uvolněn, když skončíte.

Získejte bezplatnou licenci a objevte více

Požádejte o bezplatnou dočasnou licenci k testování Aspose.Email for .NET bez omezení hodnocení.

Viz také