Как ждать IAsyncAction?

В приложениях Магазина Windows C ++ (хотя C # похож), делая что-то вроде

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

приводит к необработанному исключению. Обычно это

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

И мне нужно завершить это действие, чтобы получить информацию о покупке внутри приложения, прежде чем пытаться ее использовать. Странная вещь здесь в том, что все остальное, кроме IAsyncAction, ждет просто отлично. IAsyncOperation и IAsyncOperationWithProgress работали просто отлично, но это? Исключение, а затем сбой.

Если честно, я понятия не имею, в чем разница между IAsyncOperation и IAsyncAction, они кажутся мне похожими.

ОБНОВИТЬ :

Анализируя эту страницуhttp://msdn.microsoft.com/en-us/library/vstudio/hh750082.aspx вы можете выяснить, что IAsyncAction - это просто IAsyncOperation без типа возврата. Но вы можете видеть, что большинство IAsyncAction-s являются ожидаемыми. Однако реальная проблема заключается в том, что определенные функции Windows просто хотят выполняться в определенном потоке (по какой-то причине). ReloadSimulatorAsync - один из таких прекрасных примеров.

Используя такой код:

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

приводит к бесконечному циклу. При вызове других функций это действительно работает. Проблема здесь в том, почему задача должна выполняться в определенном потоке, если все работает в асинхронном режиме? Вместо Async это должен быть RunOn (Main / UI) Thread или аналогичный.

РЕШИТЬсм. ответ;

Ответы на вопрос(4)

Ваш ответ на вопрос