# Programação Assíncrona com C-Sharp Parte 3 de 3
Efim vamos falar de TAP (Task-based Asynchronous Pattern) 🎉🎈🎊. Há três semanas iniciei uma série sobre programação assíncrona com a linguagem de programação C-Sharp e o Framework da Microsoft (.NET Framework- “Full”).
são 3 posts, 1 para cada padrão:
- Asynchronous Programming Model = APM (Part 1 de 3)
- Event-Based Asynchronous Pattern = EAP (Part 2 de 3)
- Task-Based Asynchronous Pattern = TAP (Part 3 de 3)
## Task-Based Asynchronous Pattern = TAP
(padrão recomendado)
TAP é composto por um único método que representará a inicialização e finalização da operação assíncrona, ao contrário do padrão que vimos anteriormente no post de APM (Asynchronous Programming Model). No padrão APM precisamos dos métodos BeginSomthing e EndSomthing, lembra ?
Em comparação com o padrão EAP (Event-based Asynchronous Pattern), não é necessário o sufíxo Async ao nomear o method, muito menos a necessidade de definir um ou mais enventos na classe.
### Beleza, mas como funciona então ?
usamos duas apis/classes do .NetFramework:
Estas classes nos permite o uso de métodos para criação, manupulação e combinação das tasks, exemplos:
- WhenAll ;
- WhenAny ;
- ContinueWith ;
- Canceled ;
- Run ;
- FromResult ;
- Delay ;
- RetrayOnFault ;
- NeedOnlyOne ;
- Interleaved Operations ;
- WhenAllOrFirstException ;
- AsyncCache ;
- AsyncProducerConsumerCollection ;
Aqui o objetivo não é aprofundarmos em cada um destes métodos/ combinações mas demonstrarmos a diversidade já presente nas classes Task e Task<TResult>.
para se aprofundar nos estudos:
consuming-the-task-based-asynchronous-pattern ;
consuming-the-task-based-asynchronous-pattern#combinators ;
Abaixo um exemplo da construção de uma classe com um método assíncrono usando o padrão TAP.
dica importante: quando retornarmos uma Task<TResult> geralmente queremos retornar mais que um valor para isso podemos usar um objeto estruturado ou tuples.
doc oficial para aprofundar o conhecimento.