BT

A sua opinião é importante! Por favor preencha a pesquisa do InfoQ!

C# 5.0 terá sintax sugar para operações assíncronas

| por Fernando Hamasaki de Amorim Seguir 0 Seguidores em 04 nov 2010. Tempo estimado de leitura: 2 minutos |

A note to our readers: As per your request we have developed a set of features that allow you to reduce the noise, while not losing sight of anything that is important. Get email and web notifications by choosing the topics you are interested in.

O time de desenvolvimento de .NET da Microsoft anunciou nessa última semana que a próxima versão da linguagem C# terá uma nova sintaxe, mais enxuta, para realizar operações assíncronas.

Atualmente, para realizar uma tarefa assíncrona é necessário utlizar callbacks, seja declarando métodos separados ou utilizar métodos anônimos. Veja um exemplo de uma requisição Web assíncrona utilizando um método anônimo como callback em uma aplicação console:

static void Main(string[] args)
{
  var request = WebRequest.Create("http://www.infoq.com/br");
  Console.WriteLine("Inicio do método: {0}", DateTime.Now.TimeOfDay);

  request.BeginGetResponse(asyncResult =>
  {
    using (var response = request.EndGetResponse(asyncResult))
    {
      using (var reader = new StreamReader(response.GetResponseStream()))
      {
        Console.WriteLine("Leitura da resposta: {0}", DateTime.Now.TimeOfDay);
        Console.WriteLine(reader.ReadToEnd());
      }
    }
  }, null);

  Console.WriteLine("Fim do método: {0}", DateTime.Now.TimeOfDay);
}

O resultado do código acima seria algo do tipo:

Inicio do método: 22:50:44.6406250
Fim do método: 22:50:44.7187500
Leitura da resposta: 22:50:45.9687500
<html>
  <head>
    <title>
      InfoQ: Rastreando mudança e inovação na comunidade de desenvolvimento de software corporativo.
    </title>
...

No C# 5.0, com a utilização dos novos comandos async e await, essa tarefa ficará muito mais fácil de escrever. Veja o mesmo exemplo acima utilizando a nova syntax sugar:

static void Main(string[] args)
{
  var request = WebRequest.Create("http://www.infoq.com/br");
  Console.WriteLine("Inicio do método: {0}", DateTime.Now.TimeOfDay);

  using (var response = await request.GetResponseAsync())
  {
    using (var reader = new StreamReader(response.GetResponseStream()))
    {
      Console.WriteLine("Leitura da resposta: {0}", DateTime.Now.TimeOfDay);
      Console.WriteLine(await reader.ReadToEndAsync());
    }
  }

  Console.WriteLine("Fim do método: {0}", DateTime.Now.TimeOfDay);
}

O resultado é o mesmo do exemplo anterior, mas a legibilidade do código e a forma como as coisas acontecem melhoraram muito.

A palavra-chave await informa ao compilador que o método sendo chamado retorna um objeto Task<>, este usado pela Task Parallel Library para executar uma operação assíncrona. No exemplo acima, foi chamado assíncronamente o método GetResponseAsync da instância de WebRequest armazenada na variável response.  A declaração desse método utiliza a palavra-chave async, para dizer ao compilador que o mesmo pode ser chamado usando await.

public override async WebResponse GetResponse()

Note também que foi usado await para ler o conteúdo do stream, tornando essa tarefa também assíncrona.

Todos esses novos recursos também farão parte do Visual Basic 11, mas ainda não há nenhuma previsão para a liberação da versão 5.0 de C# e/ou .NET Framework.

Para obter mais informações sobre programação assíncrona em .NET vá em http://msdn.com/vstudio/async. Inclusive é possível baixar uma versão CTP do Visual Studio com os novos recursos mostrados aqui.

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