การนับรายการในสำรองข้อมูล Zimbra ขนาดใหญ่แบบ TGZ อาจใช้เวลานาน หากคุณเรียกการนับบนเธรดหลักของแอปเดสก์ท็อปหรือภายในคำขอเว็บ ทุกอย่างอื่นจะต้องรอจนกว่าจะเสร็จสมบูรณ์ Aspose.Email for .NET เพิ่มเวอร์ชันแบบอะซิงโครนัสของเมธอดการนับ TGZ ทำให้คุณสามารถ await ผลลัพธ์และหยุดการนับได้หากใช้เวลานานเกินไป.
บทแนะนำนี้สำหรับนักพัฒนา .NET ที่ใช้ async และ await อยู่แล้ว หากคุณต้องการนับอย่างรวดเร็วในเครื่องมือคอนโซลหรือสคริปต์ เวอร์ชันปกติจะง่ายกว่า; ดูที่ Count Messages in TGZ Files with TgzReader.GetItemsCount.
วิธีนับรายการในสำรองข้อมูล Zimbra TGZ แบบอะซิงโครนัส
มีสองเมธอดแบบอะซิงโครนัส: หนึ่งเมธอดคืนจำนวนรายการทั้งหมดในคลังข้อมูล, และอีกเมธอดคืนจำนวนรายการของประเภทหนึ่ง, เช่น ข้อความหรือผู้ติดต่อ. พวกมันคืนค่าตัวเลขเดียวกับเมธอดปกติ. ความแตกต่างคือโค้ดของคุณสามารถทำงานอื่น ๆ ได้ในขณะที่กำลังอ่านคลังข้อมูล.
ทั้งสองวิธียังรับโทเค็นการยกเลิกแบบไม่บังคับด้วย นั่นคือวิธีที่คุณเพิ่มการตั้งเวลา, เชื่อมต่อปุ่ม Cancel, หรือหยุดการทำงานเมื่อคำขอเว็บถูกละทิ้ง.
เริ่มต้นใช้งาน Aspose.Email
ติดตั้ง Aspose.Email for .NET 26.9 หรือเวอร์ชันที่ใหม่กว่า จาก NuGet:
Install-Package Aspose.Email
คุณยังต้องการสำรองข้อมูล Zimbra TGZ ด้วย ตัวอย่างใช้ไฟล์ชื่อ 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บล็อกจะปล่อยไฟล์ archive เมื่อการนับทั้งสามเสร็จสิ้น
หยุดการนับด้วยการหมดเวลา
เพื่อจำกัดระยะเวลาที่การนับสามารถทำงานได้, สร้าง token การยกเลิกพร้อมกับเวลาจำกัดและส่งผ่านเข้าไป ตัวอย่างนี้จะยกเลิกหลังจาก 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; สำหรับประเภทการยกเลิก
โทเค็นเดียวกันทำงานได้ในสถานการณ์อื่น ๆ ในแอปเดสก์ท็อป ให้เก็บแหล่งที่มาของโทเค็นในฟิลด์และยกเลิกเมื่อผู้ใช้คลิก ยกเลิก ในแอป ASP.NET Core ให้ส่งโทเค็นที่สัญญาณเมื่อไคลเอนต์ตัดการเชื่อมต่อ เพื่อให้การนับหยุดลงหากไม่มีใครรอคำตอบ.
เมื่อการนับถูกยกเลิก ให้จัดการมันในลักษณะเดียวกับที่คุณจัดการการยกเลิกในส่วนอื่นของโค้ดแบบอะซิงค์ของคุณ ตัวอย่างเช่นโดยการแสดงข้อความหรือให้ผู้ใช้ลองใหม่อีกครั้ง.
ขั้นตอนต่อไป
หลังจากทำการนับแล้ว คุณก็สามารถส่งออกข้อมูลสำรองแบบอะซิงโครนัสได้เช่นกัน; วิธีการส่งออกยังรับ token การยกเลิกด้วย เอกสาร Working with Zimbra และ TgzReader API reference ครอบคลุมสิ่งอื่น ๆ ที่คุณทำได้กับการสำรอง TGZ หากคุณมีคำถาม ให้ถามใน Aspose.Email support forum.
FAQs
ทำไมต้องนับแบบอะซิงโครนัส? ขณะที่กำลังอ่านไฟล์เก็บข้อมูล แอปพลิเคชันของคุณสามารถทำงานอื่นต่อได้ แอปเดสก์ท็อปจะตอบสนองได้อย่างต่อเนื่อง และเว็บเซิร์ฟเวอร์จะไม่ต้องผูกเธรดไว้รอคอย
ฉันสามารถยกเลิกการนับที่ใช้เวลานานเกินไปได้หรือไม่? ใช่ ทั้งสองวิธีการนับแบบอะซิงโครนัสรับโทเค็นการยกเลิกแบบเลือกได้
ประเภทรายการใดบ้างที่ฉันสามารถนับได้? ข้อความ, รายชื่อผู้ติดต่อ, รายการปฏิทิน, และงาน.
จำเป็นต้องใช้ token การยกเลิกหรือไม่? ไม่จำเป็น มันเป็นตัวเลือก หากคุณไม่ได้ส่ง token การนับจะทำจนเสร็จสิ้น.
ฉันต้องทำการ dispose ตัวอ่านหรือไม่?
ใช่. ใช้บล็อกusingเพื่อให้ไฟล์ archive ถูกปล่อยเมื่อคุณทำเสร็จ.
รับใบอนุญาตฟรีและสำรวจเพิ่มเติม
ขอรับ ใบอนุญาตชั่วคราวฟรี เพื่อทดสอบ Aspose.Email for .NET โดยไม่มีข้อจำกัดการประเมินผล.
