BT

O futuro do C#: Sequências assíncronas

| por Jonathan Allen Seguir 611 Seguidores , traduzido por Roberto Pepato Seguir 32 Seguidores em 17 jul 2015. Tempo estimado de leitura: 1 minuto |

A sintaxe async/await foi bem recebida no C#, mas agora os desenvolvedores estão solicitando mais recursos. Especificamente, eles querem poder retornar mais de um valor de suas funções assíncronas usando uma sintaxe do tipo "yield return". Esta capacidade vêm sendo descrita como "sequências assíncronas" em uma nova proposta para o C# 7.

Os proponentes da proposta gostariam de contar com dois padrões:

  • IObservable<T>, que consiste nos fundamentos da Reactive Extensions (Rx) e é parte do .NET 4.0;
  • IAsyncEnumerable<T>, que foi introduzido com o projeto Interactive Extensions (Ix) e é utilizado no Entity Framework 7.

Definindo o produtor

Segundo HaloFour:

Do ponto de vista de produção da sequência, ela deve se comportar ligeiramente diferente na forma de yield return para IObservable<T>, que deve continuar executando imediatamente, enquanto que o IAsyncEnumerable<T> deve esperar até a próxima invocação do método MoveNext().

Geralmente considera-se suficiente o uso de Observable.Create para o modelo push. Já no modelo pull, que é baseado em IAsyncEnumerable<T>, a implementação é bem mais tediosa. Este é um local no qual as versões assíncronas das funções de iteração juntamente com a instrução yield return seriam muito úteis.

Definindo o consumidor

Ainda de acordo com HaloFour:

Do ponto de vista do consumo das sequências, elas provavelmente deveriam se comportar da mesma maneira. A instrução Observable.ForEach permite que a ação execute de forma concorrente e acredito que provavelmente seria muito intuitivo permitir que o corpo da instrução foreach tenha múltiplas linhas de execução (threads) concorrentes (assumindo que elas não são disparadas de um SynchronizationContext). Se a implementação for similar a forma como a instrução await funciona, qualquer intermediário (SequenceAwaiter, etc) poderia tratar os detalhes de composição dos resultados de uma instância de IObservable<T> ou um método de extensão poderia simplesmente torná-los em uma instância de IAsyncEnumerable<T>.

Nenhum exemplo da sintaxe foi apresentado até o momento, mas presume-se que terá a seguinte forma:

await foreach(var item in AsyncSource)

Avalie esse artigo

Relevância
Estilo/Redação

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Dê sua opinião

Faça seu login para melhorar sua experiência com o InfoQ e ter acesso a funcionalidades exclusivas


Esqueci minha senha

Follow

Siga seus tópicos e editores favoritos

Acompanhe e seja notificados sobre as mais importantes novidades do mundo do desenvolvimento de software.

Like

Mais interação, mais personalização

Crie seu próprio feed de novidades escolhendo os tópicos e pessoas que você gostaria de acompanhar.

Notifications

Fique por dentro das novidades!

Configure as notificações e acompanhe as novidades relacionada a tópicos, conteúdos e pessoas de seu interesse

BT