Classe de tarefa
A classe Task é uma abstração de operação assíncrona fornecida após o .NET 4.0, com o caminho completo para System.Threading.Tasks.Task.
A classe Task é usada para representar operações assíncronas sem valor de retorno, e para operações assíncronas com valores de retorno, a subclasse Task da classe Task deve ser <TResult>usada. Tarefas criadas pela classe Task são adicionadas ao pool de threads.
Os <TResult>principais construtores da classe Tarefa/Tarefa são os seguintes:
Uma vez criada, a tarefa pode ser iniciada usando o método Start():
No desenvolvimento real, o método estático Run() da classe Task ou o método membro StartNew() da classe fábrica TaskFactory são usados com mais frequência para criar e iniciar novas tarefas.
Alguns métodos comuns na classe Tarefa:
Palavra-chave async/await
C# 5.0 introduziu as palavras-chave assíncronas e await, que proporcionaram melhor suporte para concorrência no nível da linguagem.
O assíncrono é usado para marcar métodos assíncronos: A palavra-chave assíncrona é uma palavra-chave contextual e só será tratada como uma palavra-chave ao modificar um método e Lambda, e será tratada como identificador em outras áreas. A palavra-chave assíncrona pode marcar métodos estáticos, mas não pontos de entrada (métodos Main()).
O valor de retorno do método marcado com assíncrono deve ser <TResult>Tarefa, Tarefa ou void. await é usado para esperar pelo resultado do método assíncrono:
A palavra-chave await também é contextual e é considerada apenas uma palavra-chave no método com marcação assíncrona. A palavra-chave await pode ser usada antes do método assíncrono e Task, e <TResult>Task, para aguardar o fim da execução assíncrona da tarefa. Uma estrutura simples de método assíncrono é a seguinte:
Não é que o método seja marcado com a palavra-chave assíncrona, é um método assíncrono, e as instruções que aparecem diretamente dentro do método assíncrono também são executadas de forma síncrona,Conteúdo executado assíncronamente precisa ser executado usando a classe Task。 Na verdade, um método assíncrono que não contenha nenhuma instrução await será executado de forma síncrona, momento em que o compilador dará um aviso.
Exemplo simples, usando async/await para exibir conteúdo simultaneamente na tela:
Saída: (Mono 4.4.0 & ArchLinux x64)
Não é difícil ver pelo programa acima que, no método assíncrono marcado por palavra-chave assíncrona, o código antes de usar await é executado de forma síncrona, e após await ser chamado, o código restante roda assíncronamente em uma thread separada.
|