AsyncUIおよびWinRT XAML Toolkitライブラリの待機可能な拡張メソッドにキャンセル サポートを追加することを検討しています。基本 Task クラスには組み込みの Cancel() メソッドまたはイベントがなく、タスクが定期的にチェックする必要があるキャンセル トークンに依存しているようです。タスクは TaskCompletionSource を使用して生成され、スレッド プール スレッドでループを実行してトークンをチェックする代わりに、イベントに応答して UI スレッドでタスクをキャンセルしたいので、UI シナリオでは意味がないと思います。 .
私のタスクは現在、ストーリーボードの完了やボタンのクリックなどの UI イベントが発生すると完了します。したがって、キャンセルをサポートしたい場合は、イベントからサブスクライブを解除し、アニメーションの停止などの他のクリーンアップを実行して、キャンセル要求に応答する必要があります。
TaskCompletionSource を使用する代わりに、ある種の CancellableUITask 基本クラスを作成することを考えているので、タスクの消費者が呼び出すことができる Cancel() メソッドを公開できます (たとえば、ボタンのクリックに応答して待機中のアニメーションを停止するため)。ストーリーボードの awaiter タスクをオーバーライドしてクリーンアップを実行できる仮想 OnCancellationRequested() メソッドのように。
それは理にかなっていますか?ここで説明していることを達成するための最良の方法は何ですか?