|
■No103584 (森永 さん) に返信 > 全てのDoループで > > if (cancellationToken.IsCancellationRequested) > をチェックする必要があるのでしょうか?
すべてというより、時間のかかる箇所でしょうね。 例外を投げても良いのなら、cancellationToken.ThrowIfCancellationRequestedを使うのも良いでしょう。
> 一つはできる限り計算スピードを上げたい場合には、 > 何度もcancellationToken.IsCancellationRequestedが実行されると > わずかですが計算速度が落ちてしまうことです。
些末かと思いますが、最内周のループでやると効率が悪化する可能性はあります。 カウンタで10回に一度、100回に一度チェックするとか、ご自身で調整すれば良いことです。
> もう一つは、あるAPIを実行中にフリーズしてしまった場合に、 > Thread.Abort > だと強制終了することができたのですが、 > cancellationToken.IsCancellationRequestedだと、強制終了できないという点です。
そうですね。 元々、Thread.Abortの安全は保証されていなかった(中止位置によっては変数・メモリが破壊されうる)わけですので、過去のことは忘れ、欠陥のあるAPIの利用をやめるとか、いろいろと見直すべきでしょう。 それができないなら、.NET Frameworkを継続利用すれば良いだけです。
|