TaskContiuationOptions.NotOnFaulted
, очевидно, не будет иметь никакого эффекта, если только ваш метод не вышел из строя, то есть исключение, сгенерированное во время его выполнения, было обработано.
В вашем блоке catch вы должны повторно сгенерировать исключение (и сохранить трассировку стека) с помощью оператора throw;
после того, как вы выполнили свою работу (возможно, некоторая очистка) - иначе исключение не будет брошен снова, поэтому ваш метод не будет считаться ошибочным.