Cómo 'esperar' al levantar un evento EventHandler

A veces, el patrón de eventos se utiliza para generar eventos en aplicaciones MVVM o un modelo de vista secundario para enviar un mensaje a su modelo de vista principal de una manera poco acoplada como esta.

Parent ViewModel

searchWidgetViewModel.SearchRequest += (s,e) => 
{
    SearchOrders(searchWidgitViewModel.SearchCriteria);
};

SearchWidget ViewModel

public event EventHandler SearchRequest;

SearchCommand = new RelayCommand(() => {

    IsSearching = true;
    if (SearchRequest != null) 
    {
        SearchRequest(this, EventArgs.Empty);
    }
    IsSearching = false;
});

Al refactorizar mi aplicación para .NET4.5 estoy haciendo todo lo posible para usar el códigoasync yawait. Sin embargo, lo siguiente no funciona (bueno, realmente no lo esperaba)

 await SearchRequest(this, EventArgs.Empty);

El framework definitivamente hace esto para llamar a los manejadores de eventos.como esto, pero no estoy seguro de cómo lo hace?

private async void button1_Click(object sender, RoutedEventArgs e)
{
   textBlock1.Text = "Click Started";
   await DoWork();
   textBlock2.Text = "Click Finished";
}

Todo lo que he encontrado sobre el tema de plantear eventos de manera asíncrona.es antiguo pero no puedo encontrar algo en el marco para apoyar esto.

Cómo puedoawait la convocatoria de un evento, pero permanecer en el hilo de la interfaz de usuario.

Respuestas a la pregunta(3)

Su respuesta a la pregunta