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:
Mainjest oznaczony jakoasync, aby mógł czekać na zliczenia bez blokowania.- Każde zliczenie kończy się przed rozpoczęciem kolejnego.
- Blok
usingzwalnia 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
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.
Czy mogę anulować liczenie, które trwa zbyt długo? Tak. Obie asynchroniczne metody liczenia akceptują opcjonalny token anulowania.
Jakie typy elementów mogę policzyć? Wiadomości, kontakty, elementy kalendarza i zadania.
Czy wymagany jest token anulowania? Nie. Jest opcjonalny. Jeśli go nie przekażesz, licznik będzie kontynuował do zakończenia.
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.
