Jak czekać na IAsyncAction?

W Windows Store Apps, C ++ (C # jest podobny), robi coś takiego

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

skutkuje nieobsługiwanym wyjątkiem. Zwykle jest

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

Potrzebuję tej akcji, aby uzyskać informacje o zakupie In App przed próbą użycia. Dziwne jest to, że cokolwiek innego oprócz IAsyncAction czeka dobrze. IAsyncOperation i IAsyncOperationWithProgress działały dobrze, ale to? Wyjątek, a następnie zawieszenie.

Szczerze mówiąc, nie mam pojęcia, jaka jest różnica między IAsyncOperation a IAsyncAction, wydają się podobne do mnie.

AKTUALIZACJA :

Analizując tę ​​stronęhttp://msdn.microsoft.com/en-us/library/vstudio/hh750082.aspx możesz dowiedzieć się, że IAsyncAction jest tylko IAsyncOperation bez typu powrotu. Ale możesz wtedy zobaczyć, że większość IAsyncAction-s jest oczekiwana. Prawdziwym problemem jest jednak to, że niektóre funkcje Windows po prostu chcą wykonać na konkretnym wątku (z jakiegoś powodu). ReloadSimulatorAsync jest jednym z takich dobrych przykładów.

Używając takiego kodu:

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

skutkuje nieskończoną pętlą. W przypadku wywołania innych funkcji faktycznie działa. Problem polega na tym, dlaczego zadanie musi być wykonywane na konkretnym wątku, jeśli wszystko jest asynchroniczne? Zamiast Async powinien być RunOn (Main / UI) Thread lub podobny.

ROZWIĄZANY, Zobacz odpowiedź;

questionAnswers(4)

yourAnswerToTheQuestion