2

私は C# 4.0 を使用して WPF アプリケーションを開発しています。このアプリケーションでは、ユーザー固有のコードが実行時にコンパイルされ、AppDomain 内で実行されます。このプロセスには 10 ミリ秒または 5 分かかる場合があります。AppDomain はTask.Factory.StartNew()によって作成されます。正常に動作します。

今、実行をキャンセル/中断できるようにしたいと考えています。コードの実行中に停止ボタンを押すことはできますが、タスクをキャンセルするにはどうすればよいですか? 私は知っています: CancellationToken.IsCancellationRequestedプロパティがありますが、何かをループすることはできません。これが、(アトミック) コードの実行中に値を確認できない理由です。また、AppDomain をアンロードしてもタスクは停止しません。

参考までに、使いやすいという理由でTaskクラスを使用しました。Threadが役立つ場合: 問題ありません。

誰かが私を助けることができますか?短いコード スニペットがいいでしょう :)。

ありがとうございました。

4

1 に答える 1

0

スレッドまたはタスクを中止することは、不適切に設計されたソリューションのコード臭です。

それがあなたの決定である場合、コードのすべての行が最後に実行される可能性があることを考慮し、システムを不整合な状態にする可能性のある管理されていないリソース、ロックなどを解放することを検討する必要があります。理論上は常にこれに注意する必要がありますが、実際にはそうではありません。

Threadと招待状の.Abort()メソッドを試す場合、 ThreadAbortExceptiontry-catchfinallyブロックに関して特別な例外であると考える必要があります。さらに、スレッドが中止されるかどうかさえ確信できません。

タスクの使用に関しては、AFAIK (私は TPL の専門家ではありません) 残念ながら、やりたいことはできません。何らかの方法でロジックを再設計して、キャンセル トークンを考慮し、計算を完全に停止する必要があります。

于 2014-03-31T01:45:30.053 に答える