12
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

The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com C# 5 e .NET Framework 4.5

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

Page 1: The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com C# 5 e .NET Framework 4.5

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

Page 2: The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com C# 5 e .NET Framework 4.5

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

Page 3: The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com C# 5 e .NET Framework 4.5

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

Page 4: The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com C# 5 e .NET Framework 4.5

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)

Page 5: The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com C# 5 e .NET Framework 4.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

Page 6: The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com C# 5 e .NET Framework 4.5

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

Page 7: The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com C# 5 e .NET Framework 4.5

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

Page 8: The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com C# 5 e .NET Framework 4.5

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

Page 9: The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com C# 5 e .NET Framework 4.5

Globalcode – Open4education

Demo 2

Cancelamento

Class Library

Novo método assíncrono:FatorialAsync(ulong, CancellationToken)

Suporte a cancelamento na aplicação WPF

Page 10: The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com C# 5 e .NET Framework 4.5

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

Page 11: The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com C# 5 e .NET Framework 4.5

Globalcode – Open4education

Demo 3

Progresso

Class Library

Novo método assíncrono:FatorialAsync(ulong, CancellationToken, IProgress<ulong>)

Suporte a progresso na aplicação WPF

Page 12: The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com C# 5 e .NET Framework 4.5

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