Como posso melhorar esse cenário de nova tentativa de exceção?

Eu estou chamando um método de serviço da web que é de terceiros e está fora do meu domínio. Por alguma razão, de vez em quando, o serviço da web falha com um tempo limite do gateway. Sua intermitência e uma chamada diretamente após uma tentativa fracassada podem ter êxito.

Agora fiquei com um dilema de codificação, tenho um código que deve fazer o truque, mas o código parece uma hora de amador, como você verá abaixo.

Esse código é realmente ruim ou aceitável devido ao uso? Se não é aceitável, como posso melhorá-lo?

Por favor, tente manter um rosto sério enquanto olha para ele.

try
{
    MDO = OperationsWebService.MessageDownload(MI);
}
catch
{
    try
    {
        MDO = OperationsWebService.MessageDownload(MI);
    }
    catch
    {
        try
        {
            MDO = OperationsWebService.MessageDownload(MI);
        }
        catch
        {
            try
            {
                MDO = OperationsWebService.MessageDownload(MI);
            }
            catch 
            {
                try
                {
                    MDO = OperationsWebService.MessageDownload(MI);
                }
                catch (Exception ex)
                {
                    // 5 retries, ok now log and deal with the error.
                }
            }
        }
    }
}

questionAnswers(10)

yourAnswerToTheQuestion