Melhor método assíncrono

Eu preciso escrever algum código assíncrono que essencialmente tenta falar repetidamente e inicializar um banco de dados. Muitas vezes a primeira tentativa falhará, portanto, o requisito para que ela tente novamente.

Nos velhos tempos eu teria usado um padrão semelhante a:

void WaitForItToWork()
{
    bool succeeded = false;
    while (!succeeded)
    {
        // do work
        succeeded = outcome; // if it worked, mark as succeeded, else retry
        Threading.Thread.Sleep(1000); // arbitrary sleep
    }
}

Eu percebi que muitas mudanças foram feitas recentemente no .NET com relação a padrões assíncronos, então minha pergunta é realmente esse o melhor método para usar ou vale a pena explorarasync coisas e se assim for como eu implementar esse padrão emasync?

Atualizar

Só para esclarecer, eu quero gerar este trabalho de forma assíncrona para que o método que o gera não precise esperar que ele termine, pois ele será gerado no construtor de um serviço, portanto, o construtor deve retornar instantaneamente.

questionAnswers(4)

yourAnswerToTheQuestion