Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

Observável vs. Tarefa

From Wiki
Jump to: navigation, search

This article explains when to use observables and when to use tasks.

SignpostIcon XAML 40.png
WP Metro Icon WP8.png
SignpostIcon WP7 70px.png
Article Metadata

Compatibilidade
Artigo
Tradução:
Originado de Observable vs. Task
Por paulo.morgado
Última alteração feita por hamishwillee em 25 Jul 2013

Contents

Introdução

Em artigos anteriores (1, 2) vimos como converter uma API assíncrona baseada em eventos numa API assíncrona baseada em observáveis ou numa API assíncrona baseada em tarefas.

Quando nos deparamos com a necessidade de construir tal conversão a questão que se levanta é: quando usar qual?

Quando usar observáveis

A programação baseada em observáveis é também conhecida como programação reativa e começou a ser usada como alternativa a assíncrona baseada em eventos porque a programação assíncrona baseada em tarefas ainda não estava disponível (ou não estava disponível em todas as plataformas).

Na verdade, o campo de batalha da programação reativa são as correntes de eventos (event streams). É aqui que a utilização de eventos se torna também mais natural.

Uma API baseada em eventos em que o evento apenas é disparado uma vez é, na verdade, uma API baseada em chamadas de resposta (callback). O facto de ser implementada com o mecanismo de eventos da plataforma .NET não faz dela uma API baseada em eventos.

A existência da necessidade de combinar várias correntes de eventos e filtrá-las é também uma boa indicação para a utilização de observáveis.

Quando usar tarefas

Como o nome indica, uma tarefa é algo que tem um início e um fim. Assim sendo, todas as API assíncronoas baseadas num mecanismo de chamada de resposta (callback) são candidatadas a ser transformadas numa API assíncrona baseada em tarefas.

Matriz de aplicabilidade

Outra forma de olhar para isto é:

  • Tarefas são para um único valor futuro
  • Observáveis são para múltiplos valores futuros

A tabela seguinte mostra a correspondência entre APIs assíncronas e as suas contrapartes síncronas:

Síncrono Assíncrono
Único Valor -
// chamada síncrona
var x = F(42);
 
// chamada síncrona
var y = G(x);
Tarefa
// chamada assíncrona
var x = FAsync(42);
 
// chamada assíncrona
var y = GAsync(x);
Múltiplos Valores Enumerável
// Base de dados de compras
var res =
from o in orders
from p in p.Products
where p.Price > 29.95m
select p.Name;
 
// MoveNext síncrono
foreach (var p in res)
{
Console.WriteLine(p);
}
Observável
// Eventos de bolsa
var res =
from t in trades
from q in t.Symboils
where q.Quote > 29.95m
select q.Symbol;
 
// MoveNext assíncrono
res.Subscribe(p => Console.WriteLine(p));


Recursos

This page was last modified on 25 July 2013, at 23:37.
148 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×