دعم مكتبة القابلة للمقاطعة

مكتبة القابلة للمقاطعة

في Aspose.Slides 18.4، قدمنا الفئات InterruptionToken وInterruptionTokenSource. تسمح لك بمقاطعة المهام الطويلة مثل فك التسلسل، التسلسل، وعرض الشرائح.

الجزء التالي من التعليمات البرمجية يوضح مقاطعة مهمة جارية:

public static void Run()
{
    Action<IInterruptionToken> action = (IInterruptionToken token) =>
    {
        LoadOptions options = new LoadOptions { InterruptionToken = token };
        using (Presentation presentation = new Presentation("sample.pptx", options))
        {
            presentation.Save("sample.ppt", SaveFormat.Ppt);
        }
    };

    InterruptionTokenSource tokenSource = new InterruptionTokenSource();
    Run(action, tokenSource.Token); // تشغيل الإجراء في خيط منفصل
    Thread.Sleep(10000);            // مهلة
    tokenSource.Interrupt();        // إيقاف التحويل
}

private static void Run(Action<IInterruptionToken> action, IInterruptionToken token)
{
    Task.Run(() => { action(token); });
}

.NET CancellationToken ومكتبة القابلة للمقاطعة

عند الحاجة إلى استخدام CancellationToken إلى جانب مكتبة Aspose.Slides القابلة للمقاطعة، قم بلف معالجة Presentation ومقاطعة InterruptionToken عندما تكون CancellationToken.IsCancellationRequested true.

هذا الكود C# يوضح العملية:

public static void Main()
{
    CancellationTokenSource tokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(20));
    ProcessPresentation("sample.pptx", "sample.pdf", tokenSource.Token);
}

static void ProcessPresentation(string path, string outPath, CancellationToken cancellationToken)
{
    Action<IInterruptionToken> action = (IInterruptionToken token) =>
    {
        LoadOptions options = new LoadOptions {InterruptionToken = token};
        using (Presentation presentation = new Presentation(path, options))
        {
            presentation.Save(outPath, SaveFormat.Pdf);
        }
    };
    
    InterruptionTokenSource tokenSource = new InterruptionTokenSource();
    Task task = Run(action, tokenSource.Token); // تشغيل الإجراء في خيط منفصل

    while (!task.Wait(500)) // انتظر وراقب ما إذا كان cancellationToken.IsCancellationRequested قد تم تعيينه
    {
        if (cancellationToken.IsCancellationRequested)
        {
            Console.WriteLine("Presentation processing was canceled");
            tokenSource.Interrupt(); // مقاطعة معالجة العرض التقديمي
        }
    }
}

private static Task Run(Action<IInterruptionToken> action, IInterruptionToken token)
{
    return Task.Run(() =>
    {
        action(token);
    });
}

الأسئلة المتكررة

ما هو هدف مكتبة المقاطعة في Aspose.Slides؟

توفر آلية لمقاطعة العمليات الطويلة—مثل تحميل أو حفظ أو عرض العروض التقديمية—قبل إكمالها. وهذا مفيد عندما يجب تقييد وقت المعالجة أو لم تعد الحاجة إلى المهمة.

ما الفرق بين InterruptionToken وInterruptionTokenSource?

  • InterruptionToken يتم تمريره إلى واجهة برمجة تطبيقات Aspose.Slides ويتم التحقق منه أثناء العمليات الطويلة.
  • InterruptionTokenSource يُستخدم في الكود الخاص بك لإنشاء الرموز وتفعيل المقاطعات عبر استدعاء Interrupt().

هل يمكنني استخدام .NET CancellationToken مع مكتبة المقاطعة؟

نعم. يمكنك مراقبة CancellationToken في منطق تطبيقك والاستدعاء InterruptionTokenSource.Interrupt() عندما يتم طلب الإلغاء. وهذا يمكّن Aspose.Slides من الاندماج مع سير عمل الإلغاء القياسي في .NET.

ما هي المهام التي يمكن مقاطعتها؟

أي مهمة في Aspose.Slides تقبل InterruptionToken—مثل تحميل عرض تقديمي باستخدام Presentation(path, loadOptions) أو حفظه عبر Presentation.Save(...)—يمكن مقاطعتها.

هل تحدث المقاطعة فورًا؟

لا. المقاطعة تعاونية: العملية تتحقق دوريًا من الرمز وتتوقف فور اكتشاف أنها تم استدعاء Interrupt().

ماذا سيحدث إذا استدعيت Interrupt() بعد أن تكمل المهمة بالفعل؟

لا شيء—الاستدعاء لا يؤثر إذا كانت المهمة المقابلة قد اكتملت بالفعل.

هل يمكنني إعادة استخدام نفس InterruptionTokenSource لمهام متعددة؟

نعم—ولكن بعد استدعاء Interrupt() على ذلك المصدر، ستُقاطع جميع المهام التي تستخدم رموزه. استخدم مصادر رموز منفصلة لإدارة المهام بشكل مستقل.