Upload
rogerio-moraes-de-carvalho
View
1.448
Download
2
Embed Size (px)
DESCRIPTION
Assincronia no .NET 4.5, Task-based Asynchronous Pattern (TAP), async e await, Cancelamento com CancellationTokenSource e CancellationToken e progresso com a interface System.IProgress de um tipo T genérico e a classe System.Progress de um tipo genérico T.
Citation preview
Globalcode – Open4education
Programação assíncrona com C# 5
e .NET Framework 4.5
Rogério Moraes de Carvalho
VITA Informática
@rogeriom
rogeriomc.wordpress.com
Globalcode – Open4education
Agenda
Assincronia no .NET 4.5
Task-based Asynchronous Pattern (TAP)
async e await
Demo 1 - TAP, async e await
Cancelamento (opcional)
Demo 2 - Cancelamento
Progresso (opcional)
Demo 3 - Progresso
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.NET
1.0
Event-based Asynchronous Pattern (EAP)
Método NomeMetodoAsync
Evento NomeMetodoCompleted
Opcionalmente um método NomeMetodoAsyncCancel
Opcionalmente um evento NomeMetodoProgressChanged
.NET
2.0
Task-based Asynchronous Pattern (TAP) *
Método NomeMetodoAsync ou NomeMetodoTaskAsync* Abordagem recomendada atualmente para programação assíncrona.NET
4.0
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)
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
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
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
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
Globalcode – Open4education
Demo 2
Cancelamento
Class Library
Novo método assíncrono:FatorialAsync(ulong, CancellationToken)
Suporte a cancelamento na aplicação WPF
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
Globalcode – Open4education
Demo 3
Progresso
Class Library
Novo método assíncrono:FatorialAsync(ulong, CancellationToken, IProgress<ulong>)
Suporte a progresso na aplicação WPF
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