c++ microsoft-metro windows-runtime wrl

c++ - No se puede usar create_async() con el componente WRL WinRT



microsoft-metro windows-runtime (1)

concurrency::create_async solo se puede usar en C ++ / CX (esto puede no estar indicado expresamente en la documentación, pero todos los posibles tipos de devolución son tipos de sombrero, lo que indica que solo se puede usar en C ++ / CX).

WRL incluye la plantilla de clase base Microsoft::WRL::AsyncBase , de la cual puede derivar para implementar operaciones asincrónicas utilizando C ++ y WRL.

No sé de una implementación canónica que envuelva std::future o concurrency::task , pero puede encontrar un ejemplo de una implementación en la biblioteca CxxReflect con licencia de Boost (buscar async_operation_base y task_based_async_operation ).

Quiero escribir un componente WinRT con soporte asíncrono usando WRL, pero encontré que create_async() está indefinido incluso ppltask.h la ppltask.h y using namespace concurrency ¿Cómo crear una tarea en segundo plano con el patrón WRL?

Mi función es como:

HRESULT GetStreamAsync([out, retval] IAsyncOperation<IRRandomAccessStream*>** operation);

También trato de usar IThreadPoolStatics->RunAsync() , pero parece que solo se puede usar en caso de IAsyncAction y sin valor de retorno. ¿Alguien puede ayudar?