重複の可能性:
C#で一般的な例外をキャッチできないのはなぜですか?
最近、サーキットブレーカーのコードを確認して記述しています。次のメソッドはコンパイルされますが、catchブロックは入力されません。私にはたくさんの回避策があり、これが正しい動作(例外のフィルタリング)を取得する唯一の方法ではありませんが、なぜこれがコンパイルされて機能しないのか興味があります!
public void AttemptCall<TException>(Action action)
where TException : Exception
{
try
{
action();
}
catch(TException e) // This block is never entered!
{
state.ActUponException(e);
throw;
}
}
これは、前のメソッドのcatchブロックに入る必要があるテストです。
[TestMethod]
public void Throw_an_exception()
{
circuitBreaker.AttemptCall<Exception>(() => throw new Exception());
// test the circuit breaker's state
}