중단 가능한 라이브러리 지원

개요

Aspose.Slides for .NET은 역직렬화, 직렬화 및 렌더링과 같은 장기 실행 프레젠테이션 작업에 대한 중단 가능한 처리 메커니즘을 제공합니다. 이 메커니즘은 InterruptionTokenInterruptionTokenSource 클래스에 기반합니다.

InterruptionTokenLoadOptions에 할당하고 Presentation 생성자에 전달할 수 있습니다. InterruptionTokenSource.Interrupt()가 호출되면 연결된 장기 실행 작업이 중단됩니다. 이 문서에서는 취소 요청을 모니터링하고 취소가 요청될 때 Interrupt()를 호출하여 표준 .NET CancellationToken과 이 메커니즘을 함께 사용하는 방법도 보여줍니다.

중단 가능한 라이브러리

Aspose.Slides 18.4에서 우리는 InterruptionTokenInterruptionTokenSource 클래스를 도입했습니다. 이 클래스들은 역직렬화, 직렬화 및 렌더링과 같은 장기 실행 작업을 중단할 수 있게 합니다.

다음 코드 스니펫은 실행 중인 작업을 중단하는 예를 보여줍니다:

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 처리를 래핑하고 CancellationToken.IsCancellationRequestedtrue인 경우 InterruptionToken을 중단합니다.

다음 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);
    });
}

자주 묻는 질문

Aspose.Slides 중단 라이브러리의 목적은 무엇인가요?

이는 로드, 저장 또는 프레젠테이션 렌더링과 같은 장기 실행 작업을 완료되기 전에 중단할 수 있는 메커니즘을 제공합니다. 처리 시간이 제한되어야 하거나 작업이 더 이상 필요하지 않을 때 유용합니다.

InterruptionTokenInterruptionTokenSource의 차이점은 무엇인가요?

  • InterruptionToken은 Aspose.Slides API에 전달되어 장기 실행 작업 중에 확인됩니다.
  • InterruptionTokenSource는 토큰을 생성하고 Interrupt()를 호출하여 중단을 트리거하기 위해 코드에서 사용됩니다.

.NET CancellationToken을 중단 라이브러리와 함께 사용할 수 있나요?

네. 애플리케이션 로직에서 CancellationToken을 모니터링하고 취소가 요청될 때 InterruptionTokenSource.Interrupt()을 호출할 수 있습니다. 이를 통해 Aspose.Slides가 표준 .NET 취소 워크플로와 통합됩니다.

어떤 작업을 중단할 수 있나요?

InterruptionToken을 수락하는 모든 Aspose.Slides 작업—예: Presentation(path, loadOptions)로 프레젠테이션을 로드하거나 Presentation.Save(...)로 저장—은 중단될 수 있습니다.

중단이 즉시 발생하나요?

아니요. 중단은 협력 방식으로 이루어집니다. 작업은 주기적으로 토큰을 확인하며, Interrupt()이 호출된 것을 감지하면 즉시 중단됩니다.

작업이 이미 완료된 후에 Interrupt()를 호출하면 어떻게 되나요?

아무 일도 일어나지 않습니다—해당 작업이 이미 완료된 경우 호출은 아무 효과도 없습니다.

여러 작업에 동일한 InterruptionTokenSource를 재사용할 수 있나요?

네—하지만 해당 소스에서 Interrupt()를 호출한 후에는 그 토큰을 사용하는 모든 작업이 중단됩니다. 작업을 독립적으로 관리하려면 별도의 토큰 소스를 사용하세요.