Contar los elementos en una copia de seguridad grande de Zimbra TGZ puede llevar un tiempo. Si ejecutas el recuento en el subproceso principal de una aplicación de escritorio o dentro de una solicitud web, todo lo demás espera hasta que termine. Aspose.Email for .NET agrega versiones asíncronas de sus métodos de recuento TGZ, de modo que puedes await el resultado y detener el recuento si se prolonga demasiado.
Este tutorial es para desarrolladores .NET que ya utilizan async y await. Si solo necesita un recuento rápido en una herramienta de consola o un script, la versión regular es más sencilla; vea Count Messages in TGZ Files with TgzReader.GetItemsCount.
Cómo contar elementos en copias de seguridad TGZ de Zimbra de forma asíncrona
Hay dos métodos asincrónicos: uno devuelve el número total de elementos en el archivo, y el otro devuelve el número de elementos de un tipo, como mensajes o contactos. Devuelven los mismos números que los métodos regulares. La diferencia es que su código es libre de realizar otras tareas mientras se lee el archivo.
Ambos métodos también aceptan un token de cancelación opcional. Así es como se agrega un tiempo de espera, se conecta un botón Cancelar o se detiene el trabajo cuando se abandona una solicitud web.
Comenzando con Aspose.Email
Instale Aspose.Email for .NET 26.9 o una versión posterior desde NuGet:
Install-Package Aspose.Email
También necesita una copia de seguridad TGZ de Zimbra. Los ejemplos usan un archivo llamado xhy.tgz.
Contar elementos TGZ de Zimbra de forma asíncrona
El siguiente programa obtiene el número total de elementos, luego cuenta los mensajes y los contactos.
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}");
}
}
}
El programa imprime el número total de elementos, seguido del número de mensajes y contactos en la copia de seguridad.
Algunas cosas a tener en cuenta:
Mainestá marcado comoasyncpara que pueda esperar los recuentos sin bloquear.- Cada recuento termina antes de que comience el siguiente.
- El bloque
usinglibera el archivo de archivo una vez que los tres recuentos se han completado.
Detener un conteo con un tiempo de espera
Para limitar cuánto tiempo puede ejecutarse un recuento, cree un token de cancelación con un límite de tiempo y páselo. Este ejemplo se detiene después de 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}");
}
Añade using System.Threading; para los tipos de cancelación.
El mismo token funciona en otras situaciones. En una aplicación de escritorio, mantenga la fuente del token en un campo y cancele cuando el usuario haga clic en Cancelar. En una aplicación ASP.NET Core, pase el token que indica cuando el cliente se desconecta, de modo que el recuento se detenga si nadie está esperando la respuesta.
Cuando se cancela un conteo, manéjalo de la misma manera que manejas la cancelación en otras partes de tu código asincrónico, por ejemplo mostrando un mensaje o permitiendo que el usuario lo intente de nuevo.
Próximos pasos
Después de contar, también puedes exportar la copia de seguridad de forma asíncrona; el método de exportación también acepta un token de cancelación. La documentación Trabajando con Zimbra y la referencia de la API TgzReader cubren las demás cosas que puedes hacer con una copia de seguridad TGZ. Si tienes preguntas, pregúntalas en el foro de soporte de Aspose.Email.
Preguntas frecuentes
¿Por qué contar de forma asíncrona? Mientras se lee el archivo, su aplicación puede seguir realizando otras tareas. Una aplicación de escritorio permanece receptiva, y un servidor web no ocupa un hilo esperando.
¿Puedo cancelar un recuento que tarda demasiado? Sí. Ambos métodos de recuento asíncronos aceptan un token de cancelación opcional.
¿Qué tipos de elementos puedo contar? Mensajes, contactos, elementos de calendario y tareas.
¿Se requiere un token de cancelación? No. Es opcional. Si no pasa uno, el conteo se ejecuta hasta completarse.
¿Necesito disponer del lector? Sí. Use un bloque
usingpara que el archivo de archivo se libere cuando termine.
Obtén una licencia gratuita y explora más
Solicite una licencia temporal gratuita para probar Aspose.Email for .NET sin restricciones de evaluación.
