การนับรายการในสำรองข้อมูล 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

  1. ทำไมต้องนับแบบอะซิงโครนัส? ขณะที่กำลังอ่านไฟล์เก็บข้อมูล แอปพลิเคชันของคุณสามารถทำงานอื่นต่อได้ แอปเดสก์ท็อปจะตอบสนองได้อย่างต่อเนื่อง และเว็บเซิร์ฟเวอร์จะไม่ต้องผูกเธรดไว้รอคอย

  2. ฉันสามารถยกเลิกการนับที่ใช้เวลานานเกินไปได้หรือไม่? ใช่ ทั้งสองวิธีการนับแบบอะซิงโครนัสรับโทเค็นการยกเลิกแบบเลือกได้

  3. ประเภทรายการใดบ้างที่ฉันสามารถนับได้? ข้อความ, รายชื่อผู้ติดต่อ, รายการปฏิทิน, และงาน.

  4. จำเป็นต้องใช้ token การยกเลิกหรือไม่? ไม่จำเป็น มันเป็นตัวเลือก หากคุณไม่ได้ส่ง token การนับจะทำจนเสร็จสิ้น.

  5. ฉันต้องทำการ dispose ตัวอ่านหรือไม่?
    ใช่. ใช้บล็อก using เพื่อให้ไฟล์ archive ถูกปล่อยเมื่อคุณทำเสร็จ.

รับใบอนุญาตฟรีและสำรวจเพิ่มเติม

ขอรับ ใบอนุญาตชั่วคราวฟรี เพื่อทดสอบ Aspose.Email for .NET โดยไม่มีข้อจำกัดการประเมินผล.

ดูเพิ่มเติม