Да, в C # рекурсия с использованием оператора безопасна, объект будет правильно расположен, когда выполнение вызываемого объекта завершится, и код вернется к вызывающему.
Но, насколько я понимаю, вы хотите бесконечную рекурсиюв этом случае этот объект никогда не будет удален, не потому, что ваш код небезопасен, просто невозможно удалить этот объект.
В любом случае, проблема в том, что вы не можете сделать бесконечную рекурсию, скороили после того, как вы справитесь с переполнением стека, c # не поддерживает хвостовую оптимизацию, поэтому бесконечная рекурсия не поддерживается в C #.