計算大型 Zimbra TGZ 備份中的項目可能需要一段時間。如果在桌面應用程式的主執行緒或 Web 請求中執行計算,其他所有操作都會等待其完成。Aspose.Email for .NET 提供了其 TGZ 計算方法的非同步版本,讓您可以 await 結果,並在計算時間過長時停止計算。

本教程針對已經使用 async 和 await 的 .NET 開發人員。如果您只需要在控制台工具或腳本中快速計算數量,普通版本會更簡單;請參閱 Count Messages in TGZ Files with TgzReader.GetItemsCount。

如何非同步計算 Zimbra TGZ 備份中的項目

有兩個非同步方法:一個返回存檔中的項目總數,另一個返回單一類型的項目數量,例如訊息或聯絡人。它們返回的數字與同步方法相同。不同之處在於,當存檔被讀取時,您的程式碼可以自由執行其他工作。

兩個方法也接受可選的取消令牌。這就是您添加超時、連接取消按鈕,或在放棄 Web 請求時停止工作的方式。

開始使用 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 區塊在所有三個計數完成後釋放存檔檔案。

使用逾時停止計數

若要限制計數執行的時間長度,請建立具有時間限制的取消代碼,並將其傳入。本範例在 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;。

相同的 token 在其他情況下也適用。在桌面應用程式中,將 token source 保存在欄位中,並在使用者點擊「取消」時取消它。在 ASP.NET Core 應用程式中,傳遞用於指示客戶端斷線的 token,這樣如果沒有人在等待答案,計數就會停止。

當計數被取消時,請以與在非同步程式碼其他地方處理取消相同的方式處理它,例如顯示訊息或讓使用者再次嘗試。

下一步

計算完成後,您也可以非同步匯出備份;匯出方法同時接受取消權杖。 Working with Zimbra 文件與 TgzReader API reference 皆說明了使用 TGZ 備份的其他操作。如有疑問,請在 Aspose.Email support forum 提問。

常見問題

  1. 為什麼要非同步計數? 在讀取壓縮檔的同時,您的應用程式可以繼續執行其他工作。桌面應用程式保持回應,Web 伺服器則不會因等待而佔用執行緒。

  2. 我可以取消耗時過長的計數嗎? 可以。兩個非同步計數方法都接受可選的取消令牌。

  3. 我可以計算哪些項目類型? 訊息、聯絡人、行事曆項目和任務。

  4. 是否需要取消令牌? 不需要。這是可選的。如果您不傳遞取消令牌,計數將會執行至完成。

  5. 我需要釋放讀取器嗎? 是的。使用 using 區塊,以便在完成時釋放壓縮檔案。

獲取免費授權並探索更多

請求一個 免費臨時授權 以測試 Aspose.Email for .NET,且不受評估限制。

另請參閱