Compartilhar via


Função create_async

Cria uma construção assíncrona Tempo de Execução do Windows baseada em um objeto fornecido de função ou lambda de usuário. O tipo de retorno de create_async é um de IAsyncAction^, de IAsyncActionWithProgress<TProgress>^, de IAsyncOperation<TResult>^, ou de IAsyncOperationWithProgress<TResult, TProgress>^ baseado na assinatura lambda passada para o método.

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

Parâmetros

  • _Function

  • _Func
    O lambda ou objeto da função da qual deve ser criada uma construção assíncrona do Tempo de Execução do Windows.

Valor de retorno

Uma compilação assíncrona é representada por IAsyncAction^, IAsyncActionWithProgress<TProgress>^, IAsyncOperation<TResult>^, ou um IAsyncOperationWithProgress<TResult, TProgress>^. A interface retornada depende da assinatura lambda passada à função.

Comentários

O tipo de retorno lambda determina se a compilação é uma ação ou uma operação.

Lambdas que retornam nulo causam a criação de ações. Lambdas que retornam um resultado do tipo TResult causam a criação de operações TResult.

O lambda também pode retornar task<TResult> que encapsula o trabalho aysnchronous dentro dele mesmo ou é a continuação de uma cadeia das tarefas que representam o trabalho assíncrono. Nesse caso, o próprio lambda é executado internamente, uma vez que as tarefas são as que são executadas assincronamente e o tipo de retorno do lambda será desempacotado para produzir a construção assíncrona retornada por create_async. Isso significa que um lambda que retorna uma tarefa<void> resultará na criação de ações, e um lambda que retorna uma tarefa<TResult> resultará na criação de operações de TResult.

O lambda pode ter zero, um ou dois argumentos. Os argumentos válidos são progress_reporter<TProgress> e cancellation_token, nessa ordem, se ambos forem usados. Um lambda sem argumentos resulta na criação de uma compilação assíncrona sem o recurso para o relatório de progresso. Um lambda que utiliza progress_reporter<TProgress> fará com que create_async retorne uma compilação assíncrono que relata o andamento do tipo TProgress cada vez que o método de report do objeto de progress_reporter é chamado. Um lambda que utiliza um cancellation_token pode usar esse token para verificar cancelamento, ou passá-lo para tarefas que cria de modo que o cancelamento de compilação assíncrona cause o cancelamento dessas tarefas.

Se o corpo do objeto de função ou lambda retorna um resultado (e não uma tarefa<TResult>), o lamdba será executado de forma assíncrona no processo MTA no contexto de uma tarefa que o tempo de execução cria implicitamente para ele. O método IAsyncInfo::Cancel causará cancelamento de tarefa implícita.

Se o corpo do lambda retornar uma tarefa, o lamba será executado em linha, e declarando o lambda para obter um argumento do tipo cancellation_token, você poderá acionar o cancelamento de todas as tarefas que criar no lambda transmitindo esse token quando as cria. Você também pode usar o método de register_callback no token para fazer com que o tempo de execução chame um retorno de chamada quando você chamar IAsyncInfo::Cancel na operação ou em ação síncrona produzida.

Essa função está disponível somente para aplicativos do Windows Store.

Requisitos

Cabeçalho: ppltasks.h

Namespace: simultaneidade

Consulte também

Referência

Namespace Concurrency

Classe task

Classe progress_reporter

Outros recursos

cancelation_token Class