Підрахунок елементів у великій резервній копії Zimbra у форматі TGZ може зайняти деякий час. Якщо ви виконуєте підрахунок у головному потоці настільного застосунка або всередині веб‑запиту, все інше чекає, доки він завершиться. Aspose.Email for .NET додає асинхронні версії своїх методів підрахунку TGZ, тож ви можете await результат і зупинити підрахунок, якщо він триває занадто довго.
Цей посібник призначений для розробників .NET, які вже використовують async і await. Якщо вам потрібен лише швидкий підрахунок у консольному інструменті або скрипті, звичайна версія простіша; дивіться Count Messages in TGZ Files with TgzReader.GetItemsCount.
Як підрахувати елементи у TGZ резервних копіях Zimbra асинхронно
Існує два асинхронних методи: один повертає загальну кількість елементів у архіві, а інший — кількість елементів одного типу, наприклад повідомлень або контактів. Вони повертають ті ж самі числа, що й звичайні методи. Різниця полягає в тому, що ваш код може виконувати інші завдання, поки архів читається.
Обидва методи також приймають необов’язковий токен скасування. Таким чином ви можете встановити тайм‑аут, підключити кнопку «Скасувати» або зупинити роботу, коли веб‑запит залишено.
Початок роботи з Aspose.Email
Встановіть Aspose.Email for .NET 26.9 або пізнішої версії з NuGet:
Install-Package Aspose.Email
Вам також потрібна резервна копія Zimbra TGZ. У прикладах використовується файл з назвою xhy.tgz.
Асинхронний підрахунок елементів Zimbra TGZ
Наступна програма отримує загальну кількість елементів, а потім підраховує повідомлення та контакти.
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}");
}
}
}
Програма виводить загальну кількість елементів, а потім кількість повідомлень та контактів у резервній копії.
Кілька речей, на які варто звернути увагу:
Mainпозначенийasync, щоб він міг чекати на підрахунки без блокування.- Кожен підрахунок завершується перед тим, як почнеться наступний.
- Блок
usingзвільняє файл архіву після завершення всіх трьох підрахунків.
Зупинити підрахунок з тайм-аутом
Щоб обмежити, як довго може виконуватись підрахунок, створіть токен скасування з обмеженням часу та передайте його. У цьому прикладі виконання припиняється через 30 секунд:
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}");
}
Додайте using System.Threading; для типів скасування.
Той самий токен працює і в інших ситуаціях. У настільному застосунку зберігайте джерело токена у полі та скасуйте його, коли користувач натискає Cancel. У застосунку ASP.NET Core передайте токен, який сигналізує про відключення клієнта, щоб підрахунок зупинявся, якщо ніхто не чекає на відповідь.
Коли підрахунок скасовується, обробляйте його так само, як ви обробляєте скасування в іншому місці вашого асинхронного коду, наприклад, показуючи повідомлення або дозволяючи користувачеві спробувати ще раз.
Наступні кроки
Після підрахунку ви також можете експортувати резервну копію асинхронно; метод експорту також приймає токен скасування. Документація Робота з Zimbra та Довідник API TgzReader охоплюють інші можливості роботи з TGZ‑резервною копією. Якщо у вас є питання, задайте їх на Форум підтримки Aspose.Email.
FAQs
Чому підраховувати асинхронно? Під час читання архіву ваш застосунок може продовжувати виконувати інші завдання. Десктопний додаток залишається чуйним, а веб‑сервер не блокує потік у очікуванні.
Чи можу я скасувати підрахунок, який триває занадто довго? Так. Обидва асинхронних методи підрахунку приймають необов’язковий токен скасування.
Які типи елементів я можу підрахувати?
Повідомлення, контакти, елементи календаря та завдання.Чи потрібен токен скасування? Ні. Це необов’язково. Якщо ви не передасте його, підрахунок буде виконано до завершення.
Чи потрібно вивільняти читача? Так. Використовуйте блок
using, щоб файл архіву був звільнений, коли ви закінчите.
Отримайте безкоштовну ліцензію та дізнайтеся більше
Запросіть безкоштовну тимчасову ліцензію, щоб протестувати Aspose.Email for .NET без обмежень оцінки.
