私は最近、非常に速く、私の文脈でCancellation
トークンはすべて、タスクがスケジュールされないようにすることが価値であることを学びました。私は待っているタスクで中止する必要がある、長時間実行している単一メソッドのタスクを持っています。どうすればこれを達成できますか?待っている仕事をどうやって中止できますか?
長時間実行しているメソッドに対して別のスレッドをリッピングするのが最初のアイデアですが、それ以上の場合はチェックを続けるループがあり、true
の場合は長時間実行するメソッドをホストするスレッドを中止します。
これは悪いですか?別の方法がありますか?
私は長時間実行しているタスクが1つの方法であるため、実行前にキャンセルトークンを確認するか、実行後に終了する前に長期実行方法を停止する機会はありません。すべてFileInfo
ドライブC :!のすべてのファイルのオブジェクトこれは、実行時間の長いコードです:
FileInfos = Mapper.Map<ObservableCollection<FileInfoViewModel>>(dirInfo.GetFiles($"*.{ext.TrimStart('.')}", SearchOption.AllDirectories));
私は2つの呼び出しにそれを分割し、それらの間でトークンをチェックし、それはあまり効果がありませんか、私は自分の中にCLRコードを書き換えて、手動でできる可能性があり
トークンをチェックするループを使用します。それはうまくいくが、それは非常に悪い匂いがする。
[はい、それは悪いです](http://stackoverflow.com/questions/1559255/whats-wrong-with-using-thread-abort) 'Thread.Abort()'を呼び出すことはバグとして扱うべきです。協調キャンセルを行う必要があります。取り消されるスレッドは、キャンセルされたかどうか定期的に確認し、それに応じて対応する必要があります。それができない場合は、それを放棄するほうが安全でしょう。 –
あなたの仕事が何をしているのか、キャンセルトークンが使えない理由を説明する必要があります。 –
@SamKuhmonen私の編集をご覧ください。 – ProfK