Menghitung item dalam cadangan Zimbra TGZ yang besar dapat memakan waktu. Jika Anda menjalankan penghitung pada thread utama aplikasi desktop atau di dalam permintaan web, semua hal lain akan menunggu hingga selesai. Aspose.Email for .NET menambahkan versi asynchronous dari metode penghitung TGZ‑nya, sehingga Anda dapat await hasilnya dan menghentikan penghitung jika berjalan terlalu lama.
Tutorial ini ditujukan untuk pengembang .NET yang sudah menggunakan async dan await. Jika Anda hanya membutuhkan hitungan cepat dalam alat konsol atau skrip, versi reguler lebih sederhana; lihat Count Messages in TGZ Files with TgzReader.GetItemsCount.
Cara menghitung item dalam cadangan Zimbra TGZ secara asinkron
Ada dua metode asynchronous: satu mengembalikan total jumlah item dalam arsip, dan yang lainnya mengembalikan jumlah item dari satu tipe, seperti pesan atau kontak. Mereka mengembalikan angka yang sama seperti metode biasa. Perbedaannya adalah kode Anda bebas melakukan pekerjaan lain sementara arsip sedang dibaca.
Kedua metode juga menerima token pembatalan opsional. Itu cara Anda menambahkan batas waktu, menghubungkan tombol Cancel, atau menghentikan pekerjaan ketika permintaan web ditinggalkan.
Memulai dengan Aspode.Email
Instal Aspose.Email for .NET 26.9 atau yang lebih baru dari NuGet:
Install-Package Aspose.Email
Anda juga memerlukan cadangan Zimbra TGZ. Contoh-contohnya menggunakan file bernama xhy.tgz.
Hitung item TGZ Zimbra secara asinkron
Program berikut mendapatkan total jumlah item, kemudian menghitung pesan dan kontak.
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 mencetak total jumlah item, diikuti oleh jumlah pesan dan kontak dalam cadangan.
Beberapa hal yang perlu diperhatikan:
Mainditandaiasyncsehingga dapat menunggu hitungan tanpa memblokir.- Setiap hitungan selesai sebelum yang berikutnya dimulai.
- Blok
usingmelepaskan file arsip setelah ketiga hitungan selesai.
Hentikan hitungan dengan batas waktu
Untuk membatasi berapa lama hitungan dapat berjalan, buat token pembatalan dengan batas waktu dan berikan token tersebut. Contoh ini berhenti setelah 30 detik:
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}");
}
Tambahkan using System.Threading; untuk tipe pembatalan.
Token yang sama berfungsi untuk situasi lain. Pada aplikasi desktop, simpan sumber token di sebuah field dan batalkan ketika pengguna mengklik Cancel. Pada aplikasi ASP.NET Core, kirim token yang menandakan ketika klien terputus, sehingga penghitung berhenti jika tidak ada yang menunggu jawabannya.
Ketika sebuah hitungan dibatalkan, tangani seperti Anda menangani pembatalan di tempat lain dalam kode async Anda, misalnya dengan menampilkan pesan atau membiarkan pengguna mencoba lagi.
Langkah selanjutnya
Setelah menghitung, Anda juga dapat mengekspor cadangan secara asynchronous; metode ekspor juga menerima token pembatalan. Dokumentasi Working with Zimbra dan referensi API TgzReader mencakup hal‑hal lain yang dapat Anda lakukan dengan cadangan TGZ. Jika Anda memiliki pertanyaan, tanyakan di forum dukungan Aspose.Email.
FAQs
Mengapa menghitung secara asinkron? Sementara arsip sedang dibaca, aplikasi Anda dapat terus melakukan pekerjaan lain. Aplikasi desktop tetap responsif, dan server web tidak mengikat thread sambil menunggu.
Apakah saya dapat membatalkan hitungan yang memakan terlalu lama? Ya. Kedua metode penghitungan asynchronous menerima token pembatalan opsional.
Jenis item apa yang dapat saya hitung? Pesan, kontak, item kalender, dan tugas.
Apakah token pembatalan diperlukan? Tidak. Itu bersifat opsional. Jika Anda tidak memberikan satu, hitungan akan berjalan sampai selesai.
Apakah saya perlu memanggil dispose pada pembaca? Ya. Gunakan blok
usingsehingga file arsip dibebaskan saat Anda selesai.
Dapatkan Lisensi Gratis dan Jelajahi Lebih Lanjut
Minta lisensi sementara gratis untuk menguji Aspose.Email for .NET tanpa batasan evaluasi.
