Contare gli elementi in un grande backup Zimbra TGZ può richiedere del tempo. Se esegui il conteggio sul thread principale di un’app desktop o all’interno di una richiesta web, tutto il resto attende fino al completamento. Aspose.Email for .NET aggiunge versioni asincrone dei suoi metodi di conteggio TGZ, così puoi await il risultato e interrompere il conteggio se dura troppo.
Questo tutorial è per gli sviluppatori .NET che già utilizzano async e await. Se hai bisogno solo di un conteggio rapido in uno strumento da console o in uno script, la versione normale è più semplice; vedi Count Messages in TGZ Files with TgzReader.GetItemsCount.
Come contare gli elementi nei backup TGZ di Zimbra in modo asincrono
Ci sono due metodi asincroni: uno restituisce il numero totale di elementi nell’archivio e l’altro restituisce il numero di elementi di un tipo, come messaggi o contatti. Restituiscono gli stessi numeri dei metodi regolari. La differenza è che il tuo codice è libero di eseguire altre operazioni mentre l’archivio viene letto.
Entrambi i metodi accettano anche un token di cancellazione opzionale. È così che si aggiunge un timeout, si collega un pulsante Annulla o si interrompe il lavoro quando una richiesta web viene abbandonata.
Iniziare con Aspose.Email
Installa Aspose.Email for .NET 26.9 o versioni successive da NuGet:
Install-Package Aspose.Email
Hai anche bisogno di un backup TGZ di Zimbra. Gli esempi utilizzano un file chiamato xhy.tgz.
Conta gli elementi TGZ di Zimbra in modo asincrono
Il programma seguente ottiene il numero totale di elementi, quindi conta i messaggi e i contatti.
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}");
}
}
}
Il programma stampa il numero totale di elementi, seguito dal numero di messaggi e contatti nel backup.
Alcune cose da notare:
Mainè contrassegnatoasyncin modo da poter attendere i conteggi senza bloccare.- Ogni conteggio termina prima che inizi il successivo.
- Il blocco
usingrilascia il file di archivio una volta completati tutti e tre i conteggi.
Interrompere un conteggio con timeout
Per limitare la durata di un conteggio, crea un token di cancellazione con un limite di tempo e passalo. Questo esempio si interrompe dopo 30 secondi:
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}");
}
Aggiungi using System.Threading; per i tipi di cancellazione.
Lo stesso token funziona per altre situazioni. In un’app desktop, mantieni la sorgente del token in un campo e annullala quando l’utente fa clic su Annulla. In un’app ASP.NET Core, passa il token che segnala quando il client si disconnette, così il conteggio si interrompe se nessuno sta aspettando la risposta.
Quando un conteggio viene annullato, gestiscilo nello stesso modo in cui gestisci l’annullamento altrove nel tuo codice asincrono, ad esempio mostrando un messaggio o consentendo all’utente di riprovare.
Prossimi passaggi
Dopo aver effettuato il conteggio, è possibile esportare il backup in modo asincrono; il metodo di esportazione accetta anche un token di cancellazione. La documentazione Lavorare con Zimbra e il riferimento API TgzReader coprono le altre operazioni che è possibile eseguire con un backup TGZ. Se hai domande, chiedi sul forum di supporto Aspose.Email.
Domande frequenti
Perché contare in modo asincrono? Mentre l’archivio viene letto, la tua applicazione può continuare a svolgere altre attività. Un’app desktop rimane reattiva e un server web non blocca un thread in attesa.
Posso annullare un conteggio che richiede troppo tempo? Sì. Entrambi i metodi di conteggio asincroni accettano un token di cancellazione opzionale.
Quali tipi di elementi posso contare? Messaggi, contatti, elementi del calendario e attività.
È necessario un token di cancellazione? No. È opzionale. Se non ne passi uno, il conteggio continua fino al completamento.
Devo liberare il lettore? Sì. Usa un blocco
usingin modo che il file di archivio venga rilasciato al termine.
Ottieni una licenza gratuita e scopri di più
Richiedi una licenza temporanea gratuita per testare Aspose.Email per .NET senza restrizioni di valutazione.
