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 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.

Ver também

simultaneidade Namespace