Liczenie elementów w dużej kopii zapasowej Zimbra TGZ może zająć trochę czasu. Jeśli uruchomisz liczenie w głównym wątku aplikacji desktopowej lub w ramach żądania sieciowego, wszystko inne czeka, aż się zakończy. Aspose.Email for .NET dodaje asynchroniczne wersje swoich metod liczenia TGZ, dzięki czemu możesz await wynik i zatrzymać liczenie, jeśli trwa zbyt długo.

Ten samouczek jest przeznaczony dla programistów .NET, którzy już używają async i await. Jeśli potrzebujesz tylko szybkiego zliczenia w narzędziu konsolowym lub skrypcie, zwykła wersja jest prostsza; zobacz Zlicz wiadomości w plikach TGZ przy użyciu TgzReader.GetItemsCount.

Jak asynchronicznie liczyć elementy w kopiach zapasowych Zimbra TGZ

Istnieją dwie metody asynchroniczne: jedna zwraca łączną liczbę elementów w archiwum, a druga zwraca liczbę elementów jednego typu, takiego jak wiadomości lub kontakty. Zwracają te same liczby co metody zwykłe. Różnica polega na tym, że Twój kod może wykonywać inne zadania, podczas gdy archiwum jest odczytywane.

Obie metody również akceptują opcjonalny token anulowania. Dzięki temu możesz dodać limit czasu, podłączyć przycisk Anuluj lub zatrzymać pracę, gdy żądanie sieciowe zostanie porzucone.

Rozpoczęcie pracy z Aspose.Email

Zainstaluj Aspose.Email for .NET 26.9 lub późniejszą wersję z NuGet:

Install-Package Aspose.Email

Potrzebujesz również kopii zapasowej Zimbra TGZ. Przykłady używają pliku o nazwie xhy.tgz.

Policz elementy TGZ Zimbra asynchronicznie

Poniższy program pobiera łączną liczbę elementów, a następnie liczy wiadomości i 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 wyświetla łączną liczbę elementów, a następnie liczbę wiadomości i kontaktów w kopii zapasowej.

Kilka rzeczy do zauważenia:

  • Main jest oznaczony jako async, aby mógł czekać na zliczenia bez blokowania.
  • Każde zliczenie kończy się przed rozpoczęciem kolejnego.
  • Blok using zwalnia plik archiwum po zakończeniu wszystkich trzech zliczeń.

Zatrzymaj odliczanie z limitem czasu

Aby ograniczyć, jak długo może trwać liczenie, utwórz token anulowania z limitem czasu i przekaż go. Ten przykład przerywa po 30 sekundach:

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

Dodaj using System.Threading; dla typów anulowania.

Ten sam token działa w innych sytuacjach. W aplikacji desktopowej przechowuj źródło tokena w polu i anuluj je, gdy użytkownik kliknie Anuluj. W aplikacji ASP.NET Core przekaż token, który sygnalizuje, gdy klient się rozłącza, aby licznik zatrzymał się, jeśli nikt nie czeka na odpowiedź.

Gdy odliczanie zostanie anulowane, obsłuż je tak, jak obsługujesz anulowanie w innym miejscu swojego kodu asynchronicznego, na przykład wyświetlając komunikat lub pozwalając użytkownikowi spróbować ponownie.

Kolejne kroki

Po zliczeniu możesz również wyeksportować kopię zapasową asynchronicznie; metoda eksportu przyjmuje także token anulowania. Dokumentacja Praca z Zimbra oraz TgzReader API reference opisują inne możliwości pracy z kopią zapasową TGZ. Jeśli masz pytania, zapytaj na Aspose.Email support forum.

Najczęściej zadawane pytania

  1. Dlaczego liczyć asynchronicznie? Podczas gdy archiwum jest odczytywane, Twoja aplikacja może kontynuować wykonywanie innych zadań. Aplikacja desktopowa pozostaje responsywna, a serwer internetowy nie blokuje wątku w oczekiwaniu.

  2. Czy mogę anulować liczenie, które trwa zbyt długo? Tak. Obie asynchroniczne metody liczenia akceptują opcjonalny token anulowania.

  3. Jakie typy elementów mogę policzyć? Wiadomości, kontakty, elementy kalendarza i zadania.

  4. Czy wymagany jest token anulowania? Nie. Jest opcjonalny. Jeśli go nie przekażesz, licznik będzie kontynuował do zakończenia.

  5. Czy muszę zwolnić czytnik? Tak. Użyj bloku using, aby plik archiwum został zwolniony po zakończeniu.

Uzyskaj darmową licencję i odkryj więcej

Poproś o bezpłatną tymczasową licencję, aby przetestować Aspose.Email for .NET bez ograniczeń oceny.

Zobacz także