Compartilhar via


Função async

Representa um provedor assíncrona.

template<class Fn, class... ArgTypes>
   future<typename result_of<Fn(ArgTypes...)>::type>;
      async(Fn&& fn, ArgTypes&&... args);
template<class Fn, class... ArgTypes>
   future<typename result_of<Fn(ArgTypes...)>::type>;
      async(launch policy, Fn&& fn, ArgTypes&&... args);

Parâmetros

Comentários

Definições das abreviações:

dfn

O resultado de chamar decay_copy(forward<Fn>(fn)).

dargs

Os resultados das chamadas decay_copy(forward<ArgsTypes>(args…)).

Ty

O tipo result_of<Fn(ArgTypes…)>::type.

A primeira função do modelo retorna async(launch::any, fn, args…).

A segunda função retorna um objeto de future<Ty> cujo estado assíncrona associado contém um resultado junto com os valores de dfn e de dargs e um objeto de thread para gerenciar um thread separado de execução.

A menos que decay<Fn>::type é um tipo diferente do lançamento, a segunda função não participa da resolução de sobrecarga.

Se policy é launch::any, a função pode escolher launch::async ou launch::deferred. Nessa implementação, a função usará launch::async.

Se policy é launch::async, a função criará um thread que é avaliada INVOKE(dfn, dargs..., Ty). A função retorna depois que o thread cria sem os resultados de espera. Se o sistema não pode iniciar um novo thread, a função gerará system_error que tem um código de erro de resource_unavailable_try_again.

Se policy é launch::deferred, a função marca seu estado assíncrona associado como mantendo uma função adiada e retorna. A primeira chamada a qualquer função não planejada que esperar o estado assíncrona associado pronta para ser aplicado chama a função adiada por INVOKE(dfn, dargs..., Ty)de avaliação.

Em todos os casos, o estado associado assíncrono do objeto de future não estiver definido para pronto até que a avaliação de INVOKE(dfn, dargs…, Ty) fim, gerando uma exceção ou retornar normalmente. O resultado assíncrono do estado associado é uma exceção se uma foi lançado, ou qualquer valor que seja retornado pela avaliação.

Dica

Para future— ou shared_futureo último — que anexado a uma tarefa começou a std::async, o destruidor se a tarefa não foi concluída; isto é, o bloqueia se esse thread não chamou ainda .get() ou .wait() e a tarefa ainda estiver em execução.Se future obtido de std::async é movido do escopo local, outro código que usa deve estar atento que seu destruidor pode bloquear para que o estado compartilhado fique pronto.

Pseudo da função INVOKE é definida em <functional>.

Requisitos

Cabeçalho: futuro

std de Namespace:

Consulte também

Referência

<future>

Classe result_of

Classe future

Outros recursos

Arquivos de cabeçalho da Biblioteca Padrão C++