การสนับสนุนไลบรารีที่สามารถขัดจังหวะได้

ภาพรวม

Aspose.Slides for .NET มีกลไกการประมวลผลที่สามารถขัดจังหวะได้สำหรับงานพรีเซนเทชันที่ใช้เวลานาน เช่น การถอดรหัส การเข้ารหัส และการเรนเดอร์ กลไกนี้อิงตามคลาส InterruptionToken และ InterruptionTokenSource

InterruptionToken สามารถกำหนดให้กับ LoadOptions และส่งต่อไปยังคอนสตรัคเตอร์ของ Presentation เมื่อเรียก InterruptionTokenSource.Interrupt() งานที่ใช้เวลานานที่เกี่ยวข้องจะถูกขัดจังหวะ บทความนี้ยังแสดงวิธีใช้กลไกนี้ร่วมกับ CancellationToken ของ .NET มาตรฐานโดยตรวจสอบคำขอยกเลิกและเรียก Interrupt() เมื่อมีการร้องขอยกเลิก

ไลบรารีที่สามารถขัดจังหวะได้

ใน 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); });
}

CancellationToken ของ .NET และไลบรารีที่สามารถขัดจังหวะได้

เมื่อคุณต้องการใช้ CancellationToken ร่วมกับไลบรารี Interruptible ของ 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(); // ขัดจังหวะการประมวลผล Presentation
        }
    }
}

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

FAQ

วัตถุประสงค์ของไลบรารีขัดจังหวะ Aspose.Slides คืออะไร?

ให้กลไกในการขัดจังหวะการดำเนินการที่ใช้เวลานาน — เช่น การโหลด การบันทึก หรือการเรนเดอร์พรีเซนเทชัน — ก่อนที่จะเสร็จสมบูรณ์ ซึ่งเป็นประโยชน์เมื่อเวลาการประมวลผลต้องถูกจำกัดหรือไม่ต้องการทำงานต่อ

ความแตกต่างระหว่าง InterruptionToken กับ InterruptionTokenSource คืออะไร?

  • InterruptionToken ถูกส่งให้กับ API ของ Aspose.Slides และจะถูกตรวจสอบระหว่างการดำเนินการที่ใช้เวลานาน
  • InterruptionTokenSource ใช้ในโค้ดของคุณเพื่อสร้างโทเค็นและทำให้เกิดการขัดจังหวะโดยการเรียก Interrupt()

ฉันสามารถใช้ .NET CancellationToken ร่วมกับไลบรารีขัดจังหวะได้หรือไม่?

ได้ คุณสามารถตรวจสอบ CancellationToken ในตรรกะของแอปพลิเคชันและเรียก InterruptionTokenSource.Interrupt() เมื่อมีการร้องขอยกเลิก ซึ่งทำให้ Aspose.Slides สามารถทำงานร่วมกับขั้นตอนการยกเลิกมาตรฐานของ .NET

งานใดบ้างที่สามารถขัดจังหวะได้?

งานใด ๆ ของ Aspose.Slides ที่รับ InterruptionToken — เช่น การโหลดพรีเซนเทชันด้วย Presentation(path, loadOptions) หรือการบันทึกด้วย Presentation.Save(...) — สามารถถูกขัดจังหวะได้

การขัดจังหวะเกิดขึ้นทันทีหรือไม่?

ไม่ การขัดจังหวะเป็นแบบร่วมมือ: การดำเนินการจะตรวจสอบโทเค็นเป็นระยะ ๆ และหยุดเมื่อพบว่าได้เรียก Interrupt() แล้ว

ถ้าฉันเรียก Interrupt() หลังจากงานเสร็จแล้ว จะเกิดอะไรขึ้น?

ไม่เกิดอะไร — การเรียกนี้ไม่มีผลหากงานที่เกี่ยวข้องได้เสร็จแล้ว

ฉันสามารถใช้ InterruptionTokenSource เดียวกันสำหรับหลายงานได้หรือไม่?

ได้ — แต่หลังจากคุณเรียก Interrupt() บนแหล่งนั้น งานทั้งหมดที่ใช้โทเค็นจากแหล่งนั้นจะถูกขัดจังหวะ แนะนำให้ใช้แหล่งโทเค็นแยกกันเพื่อจัดการงานอย่างอิสระ