適切なアクションのコースは、一部の使い捨てオブジェクトの作成者が、破棄されたオブジェクトに対してアクションを実行すると例外がスローされるというMicrosoftの「ルール」にわずかに反し、代わりに、いつでも例外がスローされるというより一般的なルールに従うことです。メソッドの事後条件を満たせません。Cancelメソッドの目的が、ジョブがライブであると誰も見なさないようにすることであり、Cancelメソッドが呼び出される前であっても、全員がジョブを停止していると見なす場合、メソッドの事後条件は、オブジェクトが破棄されるかどうか。
一般に、適切に設計されたオブジェクトの外部にあるコードは、破棄されたことを表明する場合を除いて、破棄されたかどうかを照会する必要はありません。代わりに、オブジェクト自体が、破棄されたオブジェクトでの意味が明確で明確なメソッドを提供する必要があります。これらのメソッドは内部でIsDisposedフラグを使用する場合がありますが、競合状態を防ぐために必要なロックを使用する必要があります。一般的に、パターン
if(!myThing.isDisposed)
myThing.DoSomething();
myThingが実際にDoSomethingIfNotDisposedメソッド(おそらくTryDoSomethingと呼ばれる)をサポートする必要があることを示しています。それができない場合は、独自のDoSomethingIfNotDisposed拡張メソッドを作成し、Try / Catchを使用してObjectDisposedException(またはオブジェクトがスローする特定の例外)を抑制します。