Не могу использовать create_async() с компонентом WRL WinRT

Я хочу написать компонент WinRT с асинхронной поддержкой с использованием WRL, но я нашел create_async() не определено, даже я включил ppltask.h а также using namespace concurrencyКак создать фоновую задачу с шаблоном WRL?

Моя функция похожа на:

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

Я тоже пытаюсь использовать IThreadPoolStatics->RunAsync(), но, кажется, это может быть использовано только в случае IAsyncAction и без возвращаемого значения. Кто-нибудь может помочь?

1 ответ

Решение

concurrency::create_async может использоваться только в C++/CX (это не может быть явно указано в документации, но все возможные типы возвращаемых данных являются типами hat, что указывает на то, что он может использоваться только в C++ / CX).

WRL включает в себя Microsoft::WRL::AsyncBase шаблон базового класса, который вы можете использовать для реализации асинхронных операций с использованием C++ и WRL.

Я не знаю канонической реализации, которая оборачивает std::future или же concurrency::task, но вы можете найти пример реализации в Boost-лицензированной библиотеке CxxReflect (найдите async_operation_base а также task_based_async_operation).

Другие вопросы по тегам