شمارش موارد در یک نسخه پشتیبان بزرگ Zimbra به صورت TGZ ممکن است زمان‌بر باشد. اگر شمارش را در رشته اصلی یک برنامه دسکتاپ یا داخل یک درخواست وب اجرا کنید، همه چیز دیگر تا پایان آن صبر می‌کند. Aspose.Email for .NET نسخه‌های ناهمزمانی از روش‌های شمارش TGZ خود را اضافه می‌کند، بنابراین می‌توانید await نتیجه را بگیرید و اگر شمارش بیش از حد طولانی شد، آن را متوقف کنید.

این آموزش برای توسعه‌دهندگان .NET است که قبلاً از async و await استفاده می‌کنند. اگر فقط به یک شمارش سریع در ابزار کنسول یا اسکریپت نیاز دارید، نسخهٔ معمولی ساده‌تر است؛ ببینید شمارش پیام‌ها در فایل‌های TGZ با TgzReader.GetItemsCount.

چگونه به‌صورت ناهمزمان موارد را در پشتیبان‌های TGZ زیمبرا شمارش کنیم

دو روش ناهمزمان وجود دارد: یکی مجموع تعداد موارد در بایگانی را برمی‌گرداند و دیگری تعداد موارد یک نوع خاص، مانند پیام‌ها یا مخاطبین را برمی‌گرداند. آن‌ها همان اعداد را همانند روش‌های معمول برمی‌گردانند. تفاوت این است که کد شما می‌تواند در حین خواندن بایگانی کارهای دیگری انجام دهد.

هر دو روش همچنین یک توکن لغو اختیاری را می‌پذیرند. این همان روشی است که می‌توانید یک زمان‌سنجی اضافه کنید، دکمه Cancel را متصل کنید، یا کار را وقتی یک درخواست وب رها می‌شود متوقف کنید.

شروع کار با Aspose.Email

نسخه 26.9 یا بالاتر Aspose.Email for .NET 26.9 را از NuGet نصب کنید:

Install-Package Aspose.Email

شما همچنین به یک نسخه پشتیبان TGZ از Zimbra نیاز دارید. مثال‌ها از فایلی به نام xhy.tgz استفاده می‌کنند.

شمارش موارد 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 فایل آرشیو را پس از اتمام هر سه شمارش آزاد می‌کند.

متوقف کردن شمارش با زمان‌سنجی

برای محدود کردن مدت زمان اجرای شمارش، یک توکن لغو با محدودیت زمانی ایجاد کنید و آن را پاس دهید. این مثال پس از ۳۰ ثانیه متوقف می‌شود:

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، توکنی را که هنگام قطع اتصال مشتری سیگنال می‌دهد، پاس کنید تا شمارش متوقف شود اگر هیچ‌کس منتظر پاسخ نباشد.

وقتی یک شمارش لغو می‌شود، آن را همان‌طور که در سایر بخش‌های کد ناهمزمان خود لغو را مدیریت می‌کنید، مدیریت کنید؛ برای مثال با نمایش یک پیام یا اجازه دادن به کاربر برای تلاش مجدد.

گام‌های بعدی

پس از شمارش، می‌توانید پشتیبان را به صورت ناهمزمان نیز صادر کنید؛ متد صادرات همچنین یک توکن لغو را می‌پذیرد. مستندات کار با Zimbra و مرجع API TgzReader سایر کارهایی را که می‌توانید با یک پشتیبان TGZ انجام دهید، پوشش می‌دهند. اگر سؤال دارید، در انجمن پشتیبانی Aspose.Email بپرسید.

سوالات متداول

  1. چرا به‌صورت ناهمزمان شمارش کنیم؟ در حالی که آرشیو در حال خوانده شدن است، برنامه شما می‌تواند به انجام کارهای دیگر ادامه دهد. یک برنامه دسکتاپ پاسخگو می‌ماند و یک سرور وب نخ را در انتظار نگه نمی‌دارد.

  2. آیا می‌توانم شمارشی که زمان زیادی می‌گیرد را لغو کنم؟ بله. هر دو روش شمارش ناهمزمان یک توکن لغو اختیاری می‌پذیرند.

  3. کدام انواع موارد را می‌توانم شمارش کنم؟ پیام‌ها، مخاطبین، موارد تقویم و وظایف.

  4. آیا توکن لغو لازم است؟ خیر. این اختیاری است. اگر یکی را پاس ندهید، شمارش تا پایان ادامه می‌یابد.

  5. آیا نیاز است که ریدر را آزاد کنم؟ بله. از یک بلوک using استفاده کنید تا فایل آرشیو هنگام اتمام کار آزاد شود.

مجوز رایگان دریافت کنید و بیشتر کاوش کنید

درخواست یک مجوز موقت رایگان برای تست Aspose.Email for .NET بدون محدودیت‌های ارزیابی.

همچنین ببینید