Tag Archives: 6

I Love C#, 6 Await In Catch

Await In Catch

Continuando a saga para conhecer as novas features do C#6 projetadas para nos ajudar na codificação de nossos aplicativos. Vamos lá:

Hoje o C#6 apresenta o sexto recurso, o TryCatch com método Async. Um recurso implementado que permite tratar métodos assincronos em um bloco try…catch.

Um problema que tínhamos neste tipo de programação era o tratamento de exceção. Tratar um erro dentro deste método assíncrono não era nada trivial.

Chega de teoria!

  • Project : Console Application
  • Visual Studio : Community 2015 (RC)
  • .NET FW : 4.6

Sintaxe

try 
    … 
catch 
    {await …} 
Finally
    {await …}

Metódo Assincrono

public async Task<int> Calculo()
{
    try
    {
        // Code
    }
    catch
    {
        await Task.Delay(4);
    }
    finally
    {
        await Task.Delay(4);
    }
}

Aqui temos um método assíncrono que realiza um calculo simples. Mas, quando era preciso tratar um erro dentro deste método não era nada trivial.

Outro exemplo:

public static async void DownloadAsync()
{
	try
	{
		throw new Exception("Error");
	}
	catch
	{
		await Task.Delay(2000);
		WriteLine("Waiting 4 seconds");
	}
	finally
	{
		await Task.Delay(2000);
		WriteLine("Waiting 4 seconds");
	}
}

Então é isso treine bastante, e fiquei familiarizado com estes novos recursos.

A Programação Assincrona

Este tipo de programação nos oferece a possibilidade de executar muitas coisas em paralelo. Podemos desenvolver para Asp.net de forma assíncrona e para móveis esta característica já é Nativa.

Async, tem muita coisa acontecendo!

Ok! Um pouco sobre o AWAIT IN ASYNC do C#6.

 

 

I Love C#, 6 Dictionary Initializer

Dictionary Initializer

Continuando a saga para conhecer as novas features do C#6 projetadas para nos ajudar na codificação de nossos aplicativos. Vamos lá:

Hoje o C#6 apresenta o quinto recurso, a Dictionary Initializer. Projetado para permitir permitem adicionar itens a uma coleção quando a coleção é instanciada de forma mais enxuta e legível.

Chega de teoria!

Console Project

Aqui um exemplo que carrega dois objetos de cliente em uma lista:

List<Cliente> cList = new List<Cliente>() 
{
 new Cliente("A123"), 
 new Cliente("B345")
}

Como era antes no C#5

Aqui um dicionário simples.

Dictionary<string, Cliente> cList = new Dictionary<string, Cliente>()
{
  {"A123", new Cliente("A123")},
  {"B456", new Cliente("B456")}
};

Aqui outro exemplo de inicialização:

Dictionary<int, string> dicionario = new Dictionary<int, string>()
            {
                {1, "C#" },
                {2, "Web" },
                {3, "Apps" },
                {4, "Xamarin" }
            };

            foreach (var item in dicionario)
            {
                WriteLine(item.Key + "" + item.Value);
            }

No C# 5, era muito FEIO inicializar um valor de uma chave em uma coleção dicionário. Temos muitos de sinais de pontuação em um espaço pequeno.

Agora no C#6

Agora temos esta nova sintaxe:

Dictionary<string, Customer> cList = new Dictionary<string, Customer>()
{
  ["A123"] = new Customer("A123"),
  ["B246"] = new Customer("B246")
};

Melhorando o segundo exemplo:

Dictionary<int, string> dicionario = new Dictionary<int, string>()
            {
                [1] = "C#",
                [2] = "Web",
                [3] = "Apps",
                [4] = "Xamarin" 
            };

Note que temos uma sintaxe de inicialização mais clara e objetiva, onde foi eliminada algumas chaves e utilizamos os valores de dicionário diretamente pelo operador “=”.

cs6_dictionaryinitializer

Podemos inicializar diretamente um valor de uma chave em um conjunto de dicionário com ele, quer a chave na coleção seja um tipo string ou a qualquer outro tipo de dados.

That’s considerably easier to read.

Então é isso treine bastante, e fiquei familiarizado com estes novos recursos.

Ok! Um pouco sobre as FEATURES do C#6.