¿Cómo esperar un IAsyncAction?

En las aplicaciones de la Tienda Windows, C ++ (aunque C # es similar), hace algo como

IAsyncAction^ Action = CurrentAppSimulator::ReloadSimulatorAsync(proxyFile);
create_task( Action ).then([this]()
{
}.wait();

resulta en una excepción no controlada. Por lo general es

Microsoft C++ exception: Concurrency::invalid_operation at memory location 0x0531eb58

Y necesito que esa acción termine para obtener mi información de Compra In App antes de intentar usarla. Lo extraño aquí es que cualquier otra cosa además de IAsyncAction espera bien. IAsyncOperation y IAsyncOperationWithProgress funcionaron bien, pero esto? Excepción y luego estrellarse.

Para ser honesto, no tengo ni idea de cuál es la diferencia entre una operación de sincronización e IAsyncAction, me parecen similares.

ACTUALIZAR :

Analizando esta paginahttp://msdn.microsoft.com/en-us/library/vstudio/hh750082.aspx puede darse cuenta de que IAsyncAction es solo un IAsyncOperation sin un tipo de retorno. Pero, entonces puedes ver que la mayoría de los IAsyncAction-s son renovables. Sin embargo, el problema real es que ciertas funciones de Windows solo quieren ejecutarse en un subproceso en particular (por alguna razón). ReloadSimulatorAsync es uno de esos buenos ejemplos.

Usando código como este:

void WaitForAsync( IAsyncAction ^A )
{   
    while(A->Status == AsyncStatus::Started)
    {
        std::chrono::milliseconds milis( 1 );
        std::this_thread::sleep_for( milis );
    }   
    AsyncStatus S = A->Status;  
}

resulta en un bucle infinito. Si es llamado a otras funciones, realmente funciona. El problema aquí es ¿por qué una tarea debe ejecutarse en un subproceso en particular si todo es asíncrono? En lugar de Async, debe ser un hilo RunOn (Main / UI) o similar.

Resuelto, Ver respuesta;

Respuestas a la pregunta(4)

Su respuesta a la pregunta