Compartir a través de


create_async (Función)

Crea una construcción asincrónica de Windows en tiempo de ejecución basada en un objeto o función lambda que se ha proporcionado. El tipo devuelto de create_async es IAsyncAction^, IAsyncActionWithProgress<TProgress>^, IAsyncOperation<TResult>^ o IAsyncOperationWithProgress<TResult, TProgress>^, en función de la signatura de la expresión lambda pasada al método.

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

Parámetros

  • _Function

  • _Func
    Objeto de función o expresión lambda donde se crea una construcción asincrónica de Windows en tiempo de ejecución.

Valor devuelto

Construcción asincrónica representada por IAsyncAction^, IAsyncActionWithProgress<TProgress>^, IAsyncOperation<TResult>^ o IAsyncOperationWithProgress<TResult, TProgress>^. La interfaz devuelta depende de la signatura de la expresión lambda pasada a la función.

Comentarios

El tipo devuelto de la expresión lambda determina si la construcción es una acción o una operación.

Las expresiones lambda que devuelven "void" provocan la creación de acciones. Las expresiones lambda que devuelven un resultado de tipo TResult provocan la creación de operaciones TResult.

La expresión lambda también puede devolver un task<TResult> que encapsule el trabajo asincrónico dentro de sí mismo o que sea la continuación de una cadena de tareas que representan el trabajo asincrónico. En este caso, la propia expresión lambda se ejecuta de forma alineada, ya que las tareas son las que se ejecutan de forma asincrónica y el tipo de valor devuelto de una expresión lambda se desempaqueta para generar la construcción asincrónica que devuelve create_async. Esto implica que una expresión lambda que devuelva una tarea <void> producirá la creación de acciones, y una expresión lambda que devuelva una tarea<TResult> producirá la creación de operaciones TResult.

La expresión lambda puede aceptar cero, uno o dos argumentos. Los argumentos válidos son progress_reporter<TProgress> y cancellation_token, en ese orden si se utilizan ambos. Una expresión lambda sin argumentos produce la creación de una construcción asincrónica sin la capacidad de informar del progreso. Una expresión lambda que toma progress_reporter<TProgress> hará que create_async devuelva una construcción asincrónica que informe del progreso de los informes del tipo TProgress cada vez que se llame al método report del objeto progress_reporter. Una expresión lambda que toma un objeto cancellation_token puede utilizar dicho token para comprobar posibles cancelaciones o pasarlo a las tareas que crea para que la cancelación de la construcción asincrónica dé lugar a la cancelación de dichas tareas.

Si el cuerpo del objeto de función o expresión lambda devuelve un resultado (y no una tarea <TResult>), la expresión lamdba se ejecutará de forma asincrónica en el MTA de proceso en el contexto de una tarea que Runtime creará de forma implícita para ella. El método IAsyncInfo::Cancel producirá la cancelación de la tarea implícita.

Si el cuerpo de una expresión lambda devuelve una tarea, la expresión lamba se ejecutará de forma alineada y, al declarar la expresión lambda para que tome un argumento del tipo cancellation_token, podrá desencadenar la cancelación de cualquier tarea que cree en la expresión lambda pasando dicho token en la creación. Puede utilizar el método register_callback del token para hacer que el runtime invoque una devolución de llamada cuando llame a IAsyncInfo::Cancel en la acción u operación asincrónica producida.

Esta función solo está disponible para las aplicaciones de la Tienda Windows.

Requisitos

Encabezado: ppltasks.h

Espacio de nombres: simultaneidad

Vea también

Referencia

concurrency (Espacio de nombres)

task (Clase)

progress_reporter (Clase)

Otros recursos

cancelation_token Class