あなたのタスクはICancelableTaskを実装する必要があります。これは4.0で追加された非常にシンプルなインターフェイスです。
基本的には、Cancel()メソッドを追加するだけです。いつでも別のスレッドで呼び出す準備ができている必要があります。タスクはExecuteからすぐに戻る必要があります。通常は、Cancel()内にブール値フラグを設定します。あなたのタスクの内部では、通常、各入力を順番に処理するループがあります。たとえば、あるファイルを別のファイルにコピーするなど、各繰り返しでフラグを確認します。それが本当であれば、中断してください。このコンテキストでExecuteからtrueまたはfalseを返すかどうかは関係ありません。
ToolTaskから派生している場合 - タスクがツールを生成する場合は、大量のコードを保存し、非同期ログなどを処理するため、ツールを起動することを強くお勧めします自動的に取り消しを処理します。キャンセルが発生すると、それは生成したツールとそのすべての子を強制終了します。場合によってはC++チームのタスクがこのデフォルトの動作をオーバーライドするので、コンパイラ/リンカーは、ハーフ・ライトされた出力をクリーン・アップしてから戻すまでに数秒かかります。
(トリビュア:MSBuildでこれを初めて実装したとき、私は間違ってVSブルースクリーンを時々ボックスに入れました。これはVS10ベータ版ではほとんど出荷されましたが、ちょうど間に合って発見されました。間違った、そして時にはおっと。システム・プロセスを殺すでしょう。)
ダン
私はこれを見た理由がないと思うのですが、これは4.0の新機能で、私のタスクはまだ2.0をターゲットにしているからです。しかし、4.0にアップグレードすると、これを使い始めることができます。ありがとう! –
"プロセスツリーを把握するためのロジックが間違っていて、システムプロセスを強制終了することがありました。それを理解するために+1!ハハハッハッハ! –