assíncrono não espera

Tentei encontrar algo semelhante e leia todas as respostas dadas, mas não consegui encontrar algo que me explicasse isso.

Aqui está um código de exemplo para abrir um pop-up de diálogo (WPF). Desejo que, após o ShowOverlayView se transformar em True, a interface do usuário esteja acessível (é por isso que o async-waitit) e o programa aguardem até que termine quando o usuário clicar em "Fechar".

Esclarecimento pequeno: ShowOverlayViewModel define um booleano como true / false para a propriedade Visibility de um ContentControl. Como esse é o caso, não tenho mais o que esperar "da maneira regular".

Atualmente, quando a visualização está sendo "visível", o MessageBox é imediatamente exibido. Parece que não espera pelo AutoResetEvent.

Pequena atualização: Parece ser relevante específico para o MessageBox. Tentei alterar a propriedade Message após a linha de código de espera e ocorreu apenas após o are.Set (). Eu ainda adoraria saber por que a MessageBox agiu dessa maneira.

    private void CommandAction()
    {
        ShowOptionsDialog();
        MessageBox.Show("");
    }

    private async void ShowOptionsDialog()
    {
        var are = new AutoResetEvent(false);

        var viewmodel = new DialogPopupViewModel();
        viewmodel.Intialize("some title", "some message", DialogPopupViewModel.YesNoCancelButtons);
        SetOverlayViewModel(viewmodel);

        viewmodel.SetCloseViewAction(() =>
            {
                HideOverlayView();
                are.Set();
            });
        ShowOverlayView = true;

        await Task.Factory.StartNew(() =>
            {
                are.WaitOne();
                //return viewmodel.DialogResult;
            });
        //return DialogResultEnum.Cancel;

    }

Obrigado pela ajuda

questionAnswers(1)

yourAnswerToTheQuestion