割り込み可能ライブラリのサポート
割り込み可能ライブラリ
Aspose.Slides 18.4で、InterruptionTokenおよびInterruptionTokenSourceクラスを導入しました。これらを使用すると、デシリアライズ、シリアライズ、レンダリングなどの長時間実行タスクを中断できます。
- InterruptionTokenSource は、ILoadOptions.setInterruptionToken に渡すトークンのソースです。
- ILoadOptions.setInterruptionToken が設定され、LoadOptions インスタンスが Presentation コンストラクタに渡されると、InterruptionTokenSource.Interrupt() を呼び出すことで、その Presentation に関連付けられた長時間タスクが中断されます。
以下のコードスニペットは、実行中のタスクを中断する例です。
final InterruptionTokenSource tokenSource = new InterruptionTokenSource();
Runnable interruption = new Runnable() {
public void run() {
LoadOptions loadOptions = new LoadOptions();
loadOptions.setInterruptionToken(tokenSource.getToken());
Presentation presentation = new Presentation("sample.pptx", loadOptions);
try{
presentation.save("sample.ppt", SaveFormat.Ppt);
}
finally {
presentation.dispose();
}
}
};
Thread thread = new Thread(interruption);
thread.start(); // 別スレッドでアクションを実行
Thread.sleep(10000); // タイムアウト
tokenSource.interrupt(); // 変換を停止
FAQ
Aspose.Slides の割り込みライブラリの目的は何ですか?
プレゼンテーションのロード、保存、レンダリングなど、長時間かかる操作を完了する前に中断できる仕組みを提供します。処理時間を制限したい場合やタスクが不要になった場合に便利です。
InterruptionToken と InterruptionTokenSource の違いは何ですか?
InterruptionTokenは Aspose.Slides API に渡され、長時間実行される操作中にチェックされます。InterruptionTokenSourceはコード側でトークンを生成し、Interrupt()を呼び出すことで割り込みをトリガーします。
どのようなタスクを中断できますか?
InterruptionToken を受け取るすべての Aspose.Slides タスク、たとえば Presentation(path, loadOptions) でのプレゼンテーションのロードや Presentation.save(...) での保存などが中断対象となります。
割り込みはすぐに発生しますか?
いいえ。割り込みは協調的に行われます。操作は定期的にトークンをチェックし、Interrupt() が呼び出されたことを検出した時点で停止します。
タスクが既に完了した後に Interrupt() を呼び出した場合はどうなりますか?
何も起こりません。対応するタスクがすでに完了している場合、呼び出しは効果を持ちません。
同じ InterruptionTokenSource を複数のタスクで再利用できますか?
はい。ただし、そのソースで Interrupt() を呼び出すと、そのトークンを使用しているすべてのタスクが中断されます。タスクを独立して管理したい場合は、別々のトークンソースを使用してください。