Contar os itens em um grande backup Zimbra TGZ pode levar um tempo. Se você executar a contagem na thread principal de um aplicativo desktop ou dentro de uma solicitação web, tudo o mais espera até que ela termine. Aspose.Email for .NET adiciona versões assíncronas de seus métodos de contagem TGZ, para que você possa await o resultado e interromper a contagem se ela demorar demais.
Este tutorial é para desenvolvedores .NET que já utilizam async e await. Se você precisar apenas de uma contagem rápida em uma ferramenta de console ou script, a versão regular é mais simples; veja Count Messages in TGZ Files with TgzReader.GetItemsCount.
Como contar itens em backups TGZ do Zimbra de forma assíncrona
Existem dois métodos assíncronos: um retorna o número total de itens no arquivo, e o outro retorna o número de itens de um tipo, como mensagens ou contatos. Eles retornam os mesmos números que os métodos regulares. A diferença é que seu código pode realizar outras tarefas enquanto o arquivo é lido.
Ambos os métodos também aceitam um token de cancelamento opcional. É assim que você adiciona um tempo limite, conecta um botão Cancelar ou interrompe o trabalho quando uma solicitação da web é abandonada.
Introdução ao Aspose.Email
Instale Aspose.Email for .NET 26.9 ou posterior a partir do NuGet:
Install-Package Aspose.Email
Você também precisa de um backup TGZ do Zimbra. Os exemplos usam um arquivo chamado xhy.tgz.
Contar itens TGZ do Zimbra de forma assíncrona
O programa a seguir obtém o número total de itens, depois conta mensagens e contatos.
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}");
}
}
}
O programa imprime o número total de itens, seguido pelo número de mensagens e contatos no backup.
Algumas coisas a observar:
Mainestá marcado comoasyncpara que possa aguardar as contagens sem bloquear.- Cada contagem termina antes que a próxima comece.
- O bloco
usinglibera o arquivo de arquivamento assim que as três contagens são concluídas.
Interromper uma contagem com um tempo limite
Para limitar quanto tempo uma contagem pode ser executada, crie um token de cancelamento com um limite de tempo e passe‑o. Este exemplo desiste após 30 segundos:
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}");
}
Adicione using System.Threading; para os tipos de cancelamento.
O mesmo token funciona em outras situações. Em um aplicativo desktop, mantenha a origem do token em um campo e cancele‑a quando o usuário clicar em Cancelar. Em um aplicativo ASP.NET Core, passe o token que sinaliza quando o cliente se desconecta, de modo que a contagem pare se ninguém estiver aguardando a resposta.
Quando uma contagem é cancelada, trate‑a da mesma forma que você trata o cancelamento em outras partes do seu código assíncrono, por exemplo, exibindo uma mensagem ou permitindo que o usuário tente novamente.
Próximos passos
Depois de contar, você também pode exportar o backup de forma assíncrona; o método de exportação também aceita um token de cancelamento. A documentação Working with Zimbra e a referência da API TgzReader cobrem as outras coisas que você pode fazer com um backup TGZ. Se você tiver dúvidas, pergunte no Aspose.Email support forum.
FAQs
Por que contar de forma assíncrona? Enquanto o arquivo está sendo lido, sua aplicação pode continuar realizando outras tarefas. Um aplicativo de desktop permanece responsivo, e um servidor web não prende uma thread esperando.
Posso cancelar uma contagem que leva muito tempo? Sim. Ambos os métodos de contagem assíncronos aceitam um token de cancelamento opcional.
Quais tipos de itens posso contar? Mensagens, contatos, itens de calendário e tarefas.
É necessário um token de cancelamento? Não. É opcional. Se você não passar um, a contagem será concluída.
Preciso descartar o leitor? Sim. Use um bloco
usingpara que o arquivo de arquivamento seja liberado quando você terminar.
Obtenha uma Licença Gratuita e Explore Mais
Solicite uma licença temporária gratuita para testar Aspose.Email for .NET sem restrições de avaliação.
