1) O documento discute programação assíncrona com C# e .NET Framework 4.5 usando o padrão Task-based Asynchronous Pattern (TAP).
2) Apresenta três demos mostrando TAP, async e await, cancelamento e progresso.
3) Fornece links para documentação sobre TAP, implementação e consumo de padrões assíncronos.
3. Globalcode – Open4education
Assincronia no .NET 4.5
Padrões assíncronos no .NET Framework 4.5
Asynchronous Programming Model (APM)
Método BeginNomeMetodo
Método EndNomeMetodo
.NET1.0
Event-based Asynchronous Pattern (EAP)
Método NomeMetodoAsync
Evento NomeMetodoCompleted
Opcionalmente um método NomeMetodoAsyncCancel
Opcionalmente um evento NomeMetodoProgressChanged
.NET2.0
Task-based Asynchronous Pattern (TAP) *
Método NomeMetodoAsync ou NomeMetodoTaskAsync
* Abordagem recomendada atualmente para programação assíncrona
.NET4.0
4. Globalcode – Open4education
Task-based Asynchronous
Pattern (TAP)
Padrão baseado nos tipos Task e Task<TResult>
Representam operações assíncronas arbitrarias
Fornecem um ciclo de vida para operações assíncronas
Definidos no namespace System.Threading.Tasks
Task helpers
Execução em segundo plano
Task.Run(() => {/* código de segundo plano */})
Composição paralela (combinadores)
Task.WhenAny(params Task[] tasks)
Task.WhelAll(params Task[] tasks)
5. Globalcode – Open4education
Task-based Asynchronous
Pattern (TAP)
Assinatura da versão síncrona do método
NomeMetodo(...)
Assinaturas das versões assíncronas do método
NomeMetodoAsync(...)
NomeMetodoAsync(..., CancellationToken c)
NomeMetodoAsync(..., IProgress<T> p)
NomeMetodoAsync(..., CancellationToken c, IProgress<T> p)
Tipos de retorno das versões assíncronas
void NomeMetodo(...) Task NomeMetodoAsync(...) *
T NomeMetodo(...) Task<T> NomeMetodoAsync(...)
* Neste caso, a versão assíncrona também pode retornar void
6. Globalcode – Open4education
async e await
Modificador async
Indica que um método, uma expressão lambda ou um
método anônimo é assíncrono
Operador await
Suspende uma tarefa (Task ou Task<T>) até que ela seja
concluída
7. Globalcode – Open4education
Demo 1
TAP, async e await
Class Library
Namespace Tdc2013.TrilhaDotNet.Matematica
Classe estática AnaliseCombinatoria
Método síncrono: Fatorial(ulong)
Método assíncrono: FatorialAsync(ulong)
Aplicação WPF (Windows Presentation Foundation)
Consumo do método síncrono
versus
Consumo do método assíncrono
8. Globalcode – Open4education
Cancelamento (opcional)
Estrutura CancellationToken *
Propaga a notificação que uma operação deve ser
cancelada
Classe CancellationTokenSource *
Sinaliza para um CancellationToken que ele deve ser
cancelado
* Ambos os tipos estão no namespace System.Threading
9. Globalcode – Open4education
Demo 2
Cancelamento
Class Library
Novo método assíncrono:
FatorialAsync(ulong, CancellationToken)
Suporte a cancelamento na aplicação WPF
10. Globalcode – Open4education
Progresso (opcional)
Interface System.IProgress<in T>
Define um fornecedor para atualizações de progresso
Se for null, o progresso não deve ser reportado
Um único método: void Report(T value)
Classe System.Progress<T>
Implementa a interface System.IProgress<T>
Permite, opcionalmente, invocar um callback para cada
valor de progresso
O evento ProgressChanged permite notificar progressos
11. Globalcode – Open4education
Demo 3
Progresso
Class Library
Novo método assíncrono:
FatorialAsync(ulong, CancellationToken,
IProgress<ulong>)
Suporte a progresso na aplicação WPF
12. Globalcode – Open4education
Documentação
Task-based Asynchronous Pattern (TAP)
http://msdn.microsoft.com/en-us/library/hh873175.aspx
Implementing the Task-based Asynchronous Pattern
http://msdn.microsoft.com/en-us/library/hh873177.aspx
Consuming the Task-based Asynchronous Pattern
http://msdn.microsoft.com/en-us/library/hh873173.aspx
Asynchronous Programming with Async and Await
(C# and Visual Basic)
http://msdn.microsoft.com/en-
us/library/vstudio/hh191443.aspx