SESSÃO: DESENVOLVIMENTO

TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO

MVP ShowCast 2013
Programação assíncrona com C# 5
no Visual Studio 2013
Rogério Moraes de Carvalho
Visual C#
Diretor de Tecnologia – VITA Informática
@rogeriomc
rogeriomc.wordpress.com
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
SESSÃO: DESENVOLVIMENTO

TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO

Agenda
♦Padrões assíncronos no .NET Framework 4.5.1
♦Task-based Asynchronous Pattern (TAP)
♦async e await
♦Demonstração 1: TAP, async e await
♦Cancelamento (opcional)
♦Progresso (opcional)
♦Demonstração 2: Cancelamento e progresso

© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
SESSÃO: DESENVOLVIMENTO

TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO

.NET 1.0

Padrões assíncronos no
.NET Framework 4.5.1
Asynchronous Programming Model (APM)
Método BeginNomeMetodo
Método EndNomeMetodo

.NET 4.0

.NET 2.0

Event-based Asynchronous Pattern (EAP)
Método NomeMetodoAsync
Evento NomeMetodoCompleted
Opcionalmente um método NomeMetodoAsyncCancel
Opcionalmente um evento NomeMetodoProgressChanged

Task-based Asynchronous Pattern (TAP) *
Método NomeMetodoAsync ou NomeMetodoTaskAsync
* Abordagem atualmente recomendada pela Microsoft para programação assíncrona

© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
SESSÃO: DESENVOLVIMENTO

TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO

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.WhenAll(params Task[] tasks)

© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
SESSÃO: DESENVOLVIMENTO

TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO

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

© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
SESSÃO: DESENVOLVIMENTO

TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO

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

© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
SESSÃO: DESENVOLVIMENTO

TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO

Demonstração 1
TAP, async e await
♦Class Library

♦ Namespace MvpShowCast.Dev.LinguagensProgramacao.Matematica
♦ Classe estática AnaliseCombinatoria
♦ Método estático síncrono: Fatorial(ulong)
♦ Método estático assíncrono: FatorialAsync(ulong)

♦Aplicação WPF (Windows Presentation Foundation)
♦ Consumo do método síncrono
versus
♦ Consumo do método assíncrono

© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
SESSÃO: DESENVOLVIMENTO

TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO

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

© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
SESSÃO: DESENVOLVIMENTO

TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO

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

© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
SESSÃO: DESENVOLVIMENTO

TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO

Demonstração 2
Cancelamento e progresso
♦Class Library
♦ Novo método assíncrono:
FatorialAsync(ulong, CancellationToken, IProgress<ulong>)

♦Suporte a cancelamento e progresso na aplicação WPF

© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
SESSÃO: DESENVOLVIMENTO

TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO

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
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
SESSÃO: DESENVOLVIMENTO

TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO

Perguntas & Respostas

Rogério Moraes de Carvalho
Visual C#
Diretor de Tecnologia – VITA Informática
@rogeriomc
rogeriom.wordpress.com

© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.

Programação assíncrona com C# 5 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programação]

  • 1.
    SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTASDE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO MVP ShowCast 2013 Programação assíncrona com C# 5 no Visual Studio 2013 Rogério Moraes de Carvalho Visual C# Diretor de Tecnologia – VITA Informática @rogeriomc rogeriomc.wordpress.com © 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
  • 2.
    SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTASDE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO Agenda ♦Padrões assíncronos no .NET Framework 4.5.1 ♦Task-based Asynchronous Pattern (TAP) ♦async e await ♦Demonstração 1: TAP, async e await ♦Cancelamento (opcional) ♦Progresso (opcional) ♦Demonstração 2: Cancelamento e progresso © 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
  • 3.
    SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTASDE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO .NET 1.0 Padrões assíncronos no .NET Framework 4.5.1 Asynchronous Programming Model (APM) Método BeginNomeMetodo Método EndNomeMetodo .NET 4.0 .NET 2.0 Event-based Asynchronous Pattern (EAP) Método NomeMetodoAsync Evento NomeMetodoCompleted Opcionalmente um método NomeMetodoAsyncCancel Opcionalmente um evento NomeMetodoProgressChanged Task-based Asynchronous Pattern (TAP) * Método NomeMetodoAsync ou NomeMetodoTaskAsync * Abordagem atualmente recomendada pela Microsoft para programação assíncrona © 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
  • 4.
    SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTASDE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO 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.WhenAll(params Task[] tasks) © 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
  • 5.
    SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTASDE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO 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 © 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
  • 6.
    SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTASDE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO 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 © 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
  • 7.
    SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTASDE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO Demonstração 1 TAP, async e await ♦Class Library ♦ Namespace MvpShowCast.Dev.LinguagensProgramacao.Matematica ♦ Classe estática AnaliseCombinatoria ♦ Método estático síncrono: Fatorial(ulong) ♦ Método estático assíncrono: FatorialAsync(ulong) ♦Aplicação WPF (Windows Presentation Foundation) ♦ Consumo do método síncrono versus ♦ Consumo do método assíncrono © 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
  • 8.
    SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTASDE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO 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 © 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
  • 9.
    SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTASDE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO 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 © 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
  • 10.
    SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTASDE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO Demonstração 2 Cancelamento e progresso ♦Class Library ♦ Novo método assíncrono: FatorialAsync(ulong, CancellationToken, IProgress<ulong>) ♦Suporte a cancelamento e progresso na aplicação WPF © 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
  • 11.
    SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTASDE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO 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 © 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
  • 12.
    SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTASDE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO Perguntas & Respostas Rogério Moraes de Carvalho Visual C# Diretor de Tecnologia – VITA Informática @rogeriomc rogeriom.wordpress.com © 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.