Функция create_async

Создает асинхронную конструкцию среды выполнения Windows на основе предоставленного пользователем лямбда-выражения или объекта функции. Возвращаемый тип create_async — один из следующих: IAsyncAction^, IAsyncActionWithProgress<TProgress>^, IAsyncOperation<TResult>^ или IAsyncOperationWithProgress<TResult, TProgress>^, в зависимости от сигнатуры лямбда-выражения, переданного методу.

template<
   typename _Function
>
__declspec(
   noinline
) auto create_async(const _Function& _Func) -> decltype(ref new details::_AsyncTaskGeneratorThunk<_Function>(_Func));

Параметры

  • _Function

  • _Func
    Лямбда-выражение или объект функции, из которого требуется создать асинхронную конструкцию среды выполнения Windows.

Возвращаемое значение

Асинхронная конструкция, представленная IAsyncAction^, IAsyncActionWithProgress<TProgress>^, IAsyncOperation<TResult>^ или IAsyncOperationWithProgress<TResult, TProgress>^. Возвращаемый интерфейс зависит от сигнатуры лямбда-выражения, переданного функции.

Заметки

Возвращаемый тип лямбда-выражения определяет, чем является конструкция — действием или операцией.

Лямбда-выражения, возвращающие значение void, приводят к созданию действий. Лямбда-выражения, возвращающие результат типа TResult, приводят к созданию операций TResult.

Лямбда-выражение может также возвращать объект task<TResult>, который инкапсулирует асинхронную работу внутри себя или является продолжением цепочки задач, представляющих асинхронную работу. В этом случае лямбда-выражение само выполняется встроенным образом, поскольку задачами являются те, которые выполняются асинхронно, и возвращаемый тип лямбда-выражения распаковывается для создания асинхронной конструкции, возвращаемой create_async. Это означает, что лямбда-выражение, которое возвращает task<void>, вызовет создание действий, а лямбда-выражение, которое возвращает task<TResult>, вызовет создание операций TResult.

Лямбда-выражение может принимать ноль, один или два аргумента. Допустимые аргументы — progress_reporter<TProgress> и cancellation_token, в этом порядке, если используются оба. Лямбда-выражение без аргументов вызывает создание асинхронной конструкции без возможности выдачи отчета о ходе выполнения. Лямбда-выражение, которое принимает progress_reporter<TProgress>, приведет к возврату create_async асинхронной конструкции, которая сообщает о ходе выполнения типа TProgress каждый раз, когда вызывается метод report объекта progress_reporter. Лямбда-выражение, которое принимает cancellation_token, может использовать этот токен для проверки отмены или передать создаваемым им задачам, чтобы отмена асинхронной конструкции приводила к отмене этих задач.

Если тело лямбда-выражения или объекта функции возвращает результат (и не task<TResult>), лямбда-выражение выполняется асинхронно в многопотоковом подразделении процесса в контексте задачи, который среда неявно создает для него. Метод IAsyncInfo::Cancel вызовет отмену неявной задачи.

Если тело лямбда-выражения возвращает задачу, лямбда-выражение выполняется встроенным образом, и путем объявления, чтобы лямбда-выражение принимало аргумент типа cancellation_token, можно привести в действие отмену всех задач, создаваемых внутри лямбда-выражения путем передачи этого токена при их создании. Можно также использовать метод register_callback для этого токена, чтобы вызвать выполнение исполняющей средой обратного вызова при вызове IAsyncInfo::Cancel для созданной асинхронной операции или действия.

Эта функция доступна только в приложениях Магазина Windows.

Требования

Заголовок: ppltasks.h

Пространство имен: concurrency

См. также

Ссылки

Пространство имен concurrency

Класс task

Класс progress_reporter

Другие ресурсы

cancelation_token Class