Se sua instrução catch precisar acessar a variável declarada em uma instrução using, então inside é sua única opção.
Se a sua instrução catch precisar do objeto referenciado no uso antes de ser descartado, o interior é sua única opção.
Se a sua declaração de captura executar uma ação de duração desconhecida, como exibir uma mensagem para o usuário, e você desejar descartar seus recursos antes que isso aconteça, a parte externa é sua melhor opção.
Sempre que eu tenho um cenário semelhante a esse, o bloco try-catch geralmente está em um método diferente, além da pilha de chamadas do uso. Não é típico para um método saber como lidar com exceções que ocorrem dentro dele dessa maneira.
Portanto, minha recomendação geral é do lado de fora - do lado de fora.
private void saveButton_Click(object sender, EventArgs args)
{
try
{
SaveFile(myFile); // The using statement will appear somewhere in here.
}
catch (IOException ex)
{
MessageBox.Show(ex.Message);
}
}