Partilhar via


Classe de tarefa (Concurrency Runtime)

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 do tipo _ResultType quando concluído com sucesso. 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 as continuações (then) e os padrões de junção (when_all) e escolha (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 numa 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 a tarefa chegue a um estado final. É 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
operator!= 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 numa 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 uma aplicação da Plataforma Universal do Windows (UWP), não chame concorrência::task::wait ou get (wait calls get) em código que é executado no thread da interface do usuário. Caso contrário, o runtime gera concurrency::invalid_operation porque esses métodos bloqueiam a thread atual e podem fazer com que a aplicação pare de responder. No entanto, pode chamar o método get para receber o resultado da tarefa antecedente numa continuação baseada em tarefa, uma vez que 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

Verdadeiro se a tarefa foi concluída, falso caso contrário.

Observações

A função retorna true se a tarefa for concluída ou cancelada (com ou sem exceções geradas pelo utilizador).

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
O objeto de origem task.

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 objeto task_completion_event<result_type> ou um Windows::Foundation::IAsyncInfo, se estiveres a usar tarefas na tua aplicação Windows Runtime. 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 aplicações do Runtime do Windows.

_TaskOptions
As opções de tarefa incluem token de cancelamento, agendador, etc

_Other
O objeto de origem task.

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 o seu estado terminal quando a tarefa interna atinge o seu estado terminal, e não no momento em que 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 aplicações de ambiente Windows Runtime.

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 que seja de result_type ou task<result_type>, onde o tipo do resultado que esta tarefa produz é result_type.

_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 nova tarefa de continuação recém-criada. O tipo de resultado da tarefa retornada é determinado pelo que _Func retorna.

Observações

As sobrecargas de then que aceitam um lambda ou functor que retorna uma interface Windows::Foundation::IAsyncInfo só estão disponíveis para aplicativos do Tempo de 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 a tarefa chegue a um estado final. É 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 valor task_status que pode ser completed ou canceled. 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 uma aplicação da Plataforma Universal do Windows (UWP), não chame wait no código que é executado na thread da interface do utilizador. 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.

Ver também

concorrência Namespace