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
- policy
Um valor de inicialização .
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: