Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A classe PPL task (Parallel Patterns Library). Um task objeto representa o trabalho que pode ser executado de forma assíncrona e simultânea com outras tarefas e trabalho paralelo produzido por algoritmos paralelos no Concurrency Runtime. Produz um resultado de tipo _ResultType na conclusão bem-sucedida. Tarefas do tipo task<void> não produzem resultados. Uma tarefa pode ser esperada e cancelada independentemente de outras tarefas. Ele também pode ser composto com outras tarefas usando continuations(then), e padrões join(when_all) e choice(when_any). Quando um objeto de tarefa é atribuído a uma nova variável, o comportamento é o de std::shared_ptr; em outras palavras, ambos os objetos representam a mesma tarefa subjacente.
Sintaxe
template <>
class task<void>;
template<typename _ResultType>
class task;
Parâmetros
_ResultType
O tipo de resultado que a tarefa produz.
Membros
Typedefs Públicos
| Nome | Descrição |
|---|---|
result_type |
O tipo de resultado que um objeto desta classe produz. |
Construtores Públicos
| Nome | Descrição |
|---|---|
| tarefa | Sobrecarregado. Constrói um objeto task. |
Métodos Públicos
| Nome | Descrição |
|---|---|
| obter | Sobrecarregado. Devolve o resultado que esta tarefa produziu. Se a tarefa não estiver em um estado terminal, uma chamada para get aguardará a conclusão da tarefa. Este método não retorna um valor quando chamado em uma tarefa com um result_type de void. |
| is_apartment_aware | Determina se a tarefa desempacota uma interface do Tempo de Execução do Windows IAsyncInfo ou se é descendente dessa tarefa. |
| is_done | Determina se a tarefa foi concluída. |
| Agendador | Devolve o agendador para esta tarefa |
| em seguida, | Sobrecarregado. Adiciona uma tarefa de continuação a esta tarefa. |
| aguarde | Aguarda que esta tarefa atinja um estado terminal. É possível wait executar a tarefa em linha, se todas as dependências de tarefas estiverem satisfeitas e ela ainda não tiver sido escolhida para execução por um trabalhador em segundo plano. |
Operadores Públicos
| Nome | Descrição |
|---|---|
| operador!= | Sobrecarregado. Determina se dois task objetos representam tarefas internas diferentes. |
| operador= | Sobrecarregado. Substitui o conteúdo de um task objeto por outro. |
| operador== | Sobrecarregado. Determina se dois task objetos representam a mesma tarefa interna. |
Observações
Para obter mais informações, consulte paralelismo de tarefas.
Hierarquia de herança
task
Requerimentos
Cabeçalho: ppltasks.h
Namespace: simultaneidade
obter
Devolve o resultado que esta tarefa produziu. Se a tarefa não estiver em um estado terminal, uma chamada para get aguardará a conclusão da tarefa. Este método não retorna um valor quando chamado em uma tarefa com um result_type de void.
_ResultType get() const;
void get() const;
Valor de retorno
O resultado da tarefa.
Observações
Se a tarefa for cancelada, uma chamada para get lançará uma exceção task_canceled . Se a tarefa encontrou uma exceção diferente ou uma exceção foi propagada para ela a partir de uma tarefa antecedente, uma chamada para get lançará essa exceção.
Importante
Em um aplicativo da Plataforma Universal do Windows (UWP), não chame simultaneidade::task::wait ou get (wait calls get) no código executado no thread da interface do usuário. Caso contrário, o tempo de execução lança simultaneidade::invalid_operation porque esses métodos bloqueiam o thread atual e podem fazer com que o aplicativo pare de responder. No entanto, você pode chamar o get método para receber o resultado da tarefa antecedente em uma continuação baseada em tarefa porque o resultado está imediatamente disponível.
is_apartment_aware
Determina se a tarefa desempacota uma interface do Tempo de Execução do Windows IAsyncInfo ou se é descendente dessa tarefa.
bool is_apartment_aware() const;
Valor de retorno
true se a tarefa desembrulhar uma IAsyncInfo interface ou for descendente de tal tarefa, false caso contrário.
Método task::is_done (Concurrency Runtime)
Determina se a tarefa foi concluída.
bool is_done() const;
Valor de retorno
True se a tarefa foi concluída, false caso contrário.
Observações
A função retornará true se a tarefa for concluída ou cancelada (com ou sem exceção do usuário).
operador!=
Determina se dois task objetos representam tarefas internas diferentes.
bool operator!= (const task<_ResultType>& _Rhs) const;
bool operator!= (const task<void>& _Rhs) const;
Parâmetros
_Rhs
A tarefa de comparar.
Valor de retorno
true se os objetos se referirem a diferentes tarefas subjacentes e false de outra forma.
operador=
Substitui o conteúdo de um task objeto por outro.
task& operator= (const task& _Other);
task& operator= (task&& _Other);
Parâmetros
_Other
A origem task objeto.
Valor de retorno
Observações
Como task se comporta como um ponteiro inteligente, após uma atribuição de cópia, esse task objeto representa a mesma tarefa real que _Other representa.
Operador==
Determina se dois task objetos representam a mesma tarefa interna.
bool operator== (const task<_ResultType>& _Rhs) const;
bool operator== (const task<void>& _Rhs) const;
Parâmetros
_Rhs
A tarefa de comparar.
Valor de retorno
true se os objetos se referirem à mesma tarefa subjacente e false de outra forma.
Método task::scheduler (Concurrency Runtime)
Devolve o agendador para esta tarefa
scheduler_ptr scheduler() const;
Valor de retorno
Um ponteiro para o agendador
tarefa
Constrói um objeto task.
task();
template<typename T>
__declspec(
noinline) explicit task(T _Param);
template<typename T>
__declspec(
noinline) explicit task(T _Param, const task_options& _TaskOptions);
task(
const task& _Other);
task(
task&& _Other);
Parâmetros
T
O tipo do parâmetro a partir do qual a tarefa deve ser construída.
_Param
O parâmetro a partir do qual a tarefa deve ser construída. Isso pode ser um lambda, um objeto de função, um task_completion_event<result_type> objeto ou um Windows::Foundation::IAsyncInfo se você estiver usando tarefas em seu aplicativo do Tempo de Execução do Windows. O objeto lambda ou função deve ser um tipo equivalente a std::function<X(void)>, onde X pode ser uma variável do tipo result_type, task<result_type>ou um Windows::Foundation::IAsyncInfo em aplicativos do Tempo de Execução do Windows.
_TaskOptions
As opções de tarefa incluem token de cancelamento, agendador, etc
_Other
A origem task objeto.
Observações
O construtor padrão para a task está presente apenas para permitir que as tarefas sejam usadas dentro de contêineres. Uma tarefa construída padrão não pode ser usada até que você atribua uma tarefa válida a ela. Métodos como get, wait ou then lançarão uma exceção invalid_argument quando chamados em uma tarefa construída padrão.
Uma tarefa criada a partir de um task_completion_event será concluída (e terá suas continuações agendadas) quando o evento de conclusão da tarefa for definido.
A versão do construtor que usa um token de cancelamento cria uma tarefa que pode ser cancelada usando o cancellation_token_source token do qual foi obtido. As tarefas criadas sem um token de cancelamento não são canceláveis.
As tarefas criadas a partir de uma Windows::Foundation::IAsyncInfo interface ou lambda que retorna uma IAsyncInfo interface atingem seu estado terminal quando a operação ou ação assíncrona do Tempo de Execução do Windows incluída é concluída. Da mesma forma, as tarefas criadas a partir de um lambda que retorna um task<result_type> atingem seu estado terminal quando a tarefa interna atinge seu estado terminal, e não quando o lambda retorna.
task Comporta-se como um ponteiro inteligente e é seguro passar pelo valor. Ele pode ser acessado por vários threads sem a necessidade de bloqueios.
As sobrecargas do construtor que usam uma interface Windows::Foundation::IAsyncInfo ou um lambda que retorna tal interface, só estão disponíveis para aplicativos do Tempo de Execução do Windows.
Para obter mais informações, consulte paralelismo de tarefas.
então
Adiciona uma tarefa de continuação a esta tarefa.
template<typename _Function>
__declspec(
noinline) auto then(const _Function& _Func) const -> typename details::_ContinuationTypeTraits<_Function,
_ResultType>::_TaskOfType;
template<typename _Function>
__declspec(
noinline) auto then(const _Function& _Func,
const task_options& _TaskOptions) const -> typename details::_ContinuationTypeTraits<_Function,
_ResultType>::_TaskOfType;
template<typename _Function>
__declspec(
noinline) auto then(const _Function& _Func,
cancellation_token _CancellationToken,
task_continuation_context _ContinuationContext) const -> typename details::_ContinuationTypeTraits<_Function,
_ResultType>::_TaskOfType;
template<typename _Function>
__declspec(
noinline) auto then(const _Function& _Func,
const task_options& _TaskOptions = task_options()) const -> typename details::_ContinuationTypeTraits<_Function,
void>::_TaskOfType;
template<typename _Function>
__declspec(
noinline) auto then(const _Function& _Func,
cancellation_token _CancellationToken,
task_continuation_context _ContinuationContext) const -> typename details::_ContinuationTypeTraits<_Function,
void>::_TaskOfType;
Parâmetros
_Function
O tipo do objeto de função que será invocado por esta tarefa.
_Func
A função de continuação a ser executada quando esta tarefa for concluída. Esta função de continuação deve tomar como entrada uma variável de ou result_typetask<result_type>, onde result_type é o tipo do resultado que esta tarefa produz.
_TaskOptions
As opções de tarefa incluem token de cancelamento, agendador e contexto de continuação. Por padrão, as 3 opções anteriores são herdadas da tarefa antecedente
_CancellationToken
O token de cancelamento a ser associado à tarefa de continuação. Uma tarefa de continuação criada sem um token de cancelamento herdará o token de sua tarefa antecedente.
_ContinuationContext
Uma variável que especifica onde a continuação deve ser executada. Essa variável só é útil quando usada em um aplicativo UWP. Para obter mais informações, consulte task_continuation_context
Valor de retorno
A tarefa de continuação recém-criada. O tipo de resultado da tarefa retornada é determinado pelo que _Func retorna.
Observações
As sobrecargas de um lambda ou functor que retorna uma interface Windows::Foundation::IAsyncInfo só estão disponíveis para aplicativos do Tempo de then Execução do Windows.
Para obter mais informações sobre como usar continuações de tarefas para compor trabalho assíncrono, consulte Paralelismo de tarefas.
esperar
Aguarda que esta tarefa atinja um estado terminal. É possível wait executar a tarefa em linha, se todas as dependências de tarefas estiverem satisfeitas e ela ainda não tiver sido escolhida para execução por um trabalhador em segundo plano.
task_status wait() const;
Valor de retorno
Um task_status valor que pode ser um ou completedcanceled . Se a tarefa encontrou uma exceção durante a execução ou se uma exceção foi propagada para ela a partir de uma tarefa antecedente, wait essa exceção será lançada.
Observações
Importante
Em um aplicativo da Plataforma Universal do Windows (UWP), não chame wait o código que é executado no thread da interface do usuário. Caso contrário, o runtime lança concurrency::invalid_operation porque este método bloqueia o thread atual e pode fazer com que a aplicação deixe de responder. No entanto, é possível chamar o método concurrency::task::get para obter o resultado da tarefa antecedente numa continuidade baseada em tarefas.