ספירת הפריטים בגיבוי Zimbra גדול בפורמט TGZ יכולה לקחת זמן. אם אתה מריץ את הספירה בחוט הראשי של אפליקציית שולחן העבודה או בתוך בקשת רשת, כל השאר מחכה עד שהיא מסתיימת. Aspose.Email for .NET מוסיף גרסאות אסינכרוניות של שיטות ספירת ה‑TGZ שלו, כך שאתה יכול await את התוצאה ולעצור את הספירה אם היא נמשכת יותר מדי זמן.
מדריך זה מיועד למפתחים ב‑.NET שכבר משתמשים ב‑async וב‑await. אם אתה רק צריך ספירה מהירה בכלי קונסול או בתסריט, הגרסה הרגילה היא פשוטה יותר; ראה ספירת הודעות בקבצי TGZ עם TgzReader.GetItemsCount.
כיצד לספור פריטים בגיבויי TGZ של Zimbra באופן אסינכרוני
קיימות שתי שיטות אסינכרוניות: אחת מחזירה את המספר הכולל של הפריטים בארכיון, והשנייה מחזירה את מספר הפריטים מסוג אחד, כגון הודעות או אנשי קשר. הן מחזירות את אותם המספרים כמו השיטות הרגילות. ההבדל הוא שהקוד שלך חופשי לבצע עבודות אחרות בזמן שהארכיון נקרא.
שתי השיטות גם מקבלות אסימון ביטול אופציונלי. כך מוסיפים timeout, מחברים כפתור Cancel, או מפסיקים את העבודה כאשר בקשת רשת ננטשת.
התחלת עבודה עם Aspose.Email
התקן Aspose.Email for .NET 26.9 או גרסה מאוחרת יותר מ-NuGet:
Install-Package Aspose.Email
אתה גם צריך גיבוי TGZ של Zimbra. הדוגמאות משתמשות בקובץ בשם xhy.tgz.
ספירת פריטי Zimbra TGZ באופן אסינכרוני
התוכנית הבאה מקבלת את המספר הכולל של פריטים, ולאחר מכן סופרת הודעות ואנשי קשר.
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}");
}
}
}
התוכנית מדפיסה את המספר הכולל של הפריטים, ולאחר מכן את מספר ההודעות והקשרים בגיבוי.
כמה דברים לשים לב אליהם:
Mainמסומן כ-asyncכך שהוא יכול לחכות לספירות מבלי לחסום.- כל ספירה מסתיימת לפני שהבאה מתחילה.
- בלוק ה-
usingמשחרר את קובץ הארכיון ברגע שכל שלוש הספירות הושלמו.
עצור ספירה עם פקיעת זמן
כדי להגביל כמה זמן יכולה ריצה של ספירה, צור אסימון ביטול עם מגבלת זמן והעבר אותו. דוגמה זו מוותרת לאחר 30 שניות:
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}");
}
הוסף using System.Threading; עבור סוגי הביטול.
אותו אסימון עובד במצבים אחרים. ביישום שולחני, שמור את מקור האסימון בשדה ובטל אותו כאשר המשתמש לוחץ על Cancel. ביישום ASP.NET Core, העבר את האסימון שמסמן מתי הלקוח מתנתק, כך שהספירה תפסיק אם אף אחד אינו מחכה לתשובה.
כאשר ספירה מבוטלת, יש לטפל בזה כפי שאתה מטפל בביטול במקומות אחרים בקוד האסינכרוני שלך, למשל על ידי הצגת הודעה או מתן אפשרות למשתמש לנסות שוב.
הצעדים הבאים
לאחר הספירה, ניתן גם לייצא את הגיבוי באופן אסינכרוני; שיטת הייצוא מקבלת גם אסימון ביטול. התיעוד עבודה עם Zimbra וה‑הפניה ל‑API של TgzReader מכסים את הדברים האחרים שניתן לעשות עם גיבוי TGZ. אם יש לכם שאלות, שאלו ב‑פורום התמיכה של Aspose.Email.
שאלות נפוצות
למה לספור באופן אסינכרוני? בזמן שהארכיון נקרא, היישום שלך יכול להמשיך לבצע עבודות אחרות. אפליקציית שולחן עבודה נשארת מגיבה, ושרת אינטרנט אינו קושר חוט המתנה.
האם אני יכול לבטל ספירה שלוקחת יותר מדי זמן? כן. שני שיטות הספירה האסינכרוניות מקבלות אסימון ביטול אופציונלי.
אילו סוגי פריטים אני יכול לספור?
הודעות, אנשי קשר, פריטי לוח שנה, ומשימותהאם נדרש אסימון ביטול? לא. זה אופציונלי. אם אינך מעביר אחד, הספירה תמשיך עד להשלמה.
האם אני צריך לשחרר את הקורא? כן. השתמש בבלוק
usingכך שקובץ הארכיון ישוחרר כאשר תסיים.
קבל רישיון חינמי וגלו עוד
בקש רישיון זמני חינמי כדי לבדוק Aspose.Email for .NET ללא מגבלות הערכה.
