Büyük bir Zimbra TGZ yedeklemesindeki öğeleri saymak biraz zaman alabilir. Sayımı bir masaüstü uygulamasının ana iş parçacığında veya bir web isteği içinde çalıştırırsanız, diğer her şey bitene kadar bekler. Aspose.Email for .NET TGZ sayma yöntemlerinin eşzamanlı olmayan sürümlerini ekler, böylece sonucu await edebilir ve sayım çok uzun sürerse durdurabilirsiniz.
Bu öğretici, zaten async ve await kullanan .NET geliştiricileri içindir. Yalnızca bir konsol aracı veya betikte hızlı bir sayım yapmanız gerekiyorsa, normal sürüm daha basittir; bakınız TGZ Dosyalarındaki Mesajları TgzReader.GetItemsCount ile Sayma.
Zimbra TGZ yedeklemelerinde öğeleri asenkron olarak sayma
İki asenkron yöntem vardır: biri arşivdeki toplam öğe sayısını döndürür, diğeri ise mesajlar veya kişiler gibi tek bir türdeki öğe sayısını döndürür. Bunlar, normal yöntemlerle aynı sayıları döndürür. Farkı, arşiv okunurken kodunuzun başka işler yapabilmesidir.
Her iki yöntem de isteğe bağlı bir iptal belirteci kabul eder. Bu, bir zaman aşımı eklemenin, bir İptal düğmesi bağlamanın veya bir web isteği terk edildiğinde işi durdurmanın yoludur.
Aspose.Email ile Başlarken
Yükleyin Aspose.Email for .NET 26.9 veya daha yeni bir sürümü NuGet üzerinden:
Install-Package Aspose.Email
Ayrıca bir Zimbra TGZ yedeklemesine de ihtiyacınız var. Örneklerde xhy.tgz adlı bir dosya kullanılıyor.
Zimbra TGZ öğelerini asenkron olarak say
Aşağıdaki program toplam öğe sayısını alır, ardından mesajları ve kişileri sayar.
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, toplam öğe sayısını, ardından yedeklemedeki mesaj ve kişi sayısını yazdırır.
Dikkat edilmesi gereken birkaç şey:
Mainasyncolarak işaretlenmiştir, böylece sayımları engellemeden bekleyebilir.- Her sayım, bir sonraki başlamadan önce tamamlanır.
usingbloğu, üç sayımın tamamlanmasının ardından arşiv dosyasını serbest bırakır.
Zaman aşımıyla bir sayımı durdur
Bir sayımın ne kadar süreceğini sınırlamak için, zaman sınırlı bir iptal belirteci oluşturun ve bunu geçirin. Bu örnek 30 saniye sonra vazgeçer:
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}");
}
İptal türleri için using System.Threading; ekleyin.
Aynı token diğer durumlar için de çalışır. Bir masaüstü uygulamasında, token kaynağını bir alanda tutun ve kullanıcı İptal’e tıkladığında iptal edin. Bir ASP.NET Core uygulamasında, istemci bağlantısı kesildiğinde sinyal veren token’ı geçirin, böylece kimse yanıtı beklemiyorsa sayım durur.
Bir sayım iptal edildiğinde, async kodunuzda iptali başka yerlerde ele aldığınız şekilde ele alın; örneğin bir mesaj göstererek veya kullanıcının tekrar denemesine izin vererek.
Sonraki adımlar
Sayımı yaptıktan sonra, yedeklemeyi asenkron olarak da dışa aktarabilirsiniz; dışa aktarma yöntemi ayrıca bir iptal belirteci kabul eder. Bu Zimbra ile Çalışma belgesi ve TgzReader API referansı TGZ yedeklemesiyle yapabileceğiniz diğer şeyleri kapsar. Sorularınız varsa, Aspose.Email destek forumunda sorabilirsiniz.
SSS
Neden asenkron olarak saymalısınız? Arşiv okunurken, uygulamanız diğer işleri yapmaya devam edebilir. Bir masaüstü uygulaması yanıt verir durumda kalır ve bir web sunucusu beklerken bir iş parçacığını meşgul etmez.
Çok uzun süren bir sayımı iptal edebilir miyim? Evet. Her iki eşzamanlı sayma yöntemi de isteğe bağlı bir iptal belirteci kabul eder.
Hangi öğe türlerini sayabilirim? Mesajlar, kişiler, takvim öğeleri ve görevler.
İptal belirteci gerekli mi? Hayır. İsteğe bağlıdır. Birini geçmezseniz, sayaç tamamlanana kadar çalışır.
Okuyucuyu serbest bırakmam gerekiyor mu? Evet. İşiniz bittiğinde arşiv dosyasının serbest bırakılması için bir
usingbloğu kullanın.
Ücretsiz bir Lisans Alın ve Daha Fazlasını Keşfedin
Aspose.Email for .NET’i değerlendirme kısıtlamaları olmadan test etmek için ücretsiz geçici lisans isteyin.
