{tecnologia, conceitos, negócios, idéias, práticas, .NET, ruby, osx, ios e algo mais}
18/05/2010
Fala galera, lendo algumas coisas sobre MEF acabei conhecendo um novo tipo disponível no .NET 4: Lazy<T>.Este novo tipo, Lazy<T>, nos possibilita adiar a inicialização do seu valor até o momento do uso.Imagine que o tipo T é um tipo complexo que demanda muito processamento para ser criado, utilizando o Lazy é possível que esta inicialização seja adiada o máximo possível, até o momento da chamada ao valor.Vejamos no exemplo abaixo:
Lazy<string> lazy = new Lazy<string>(() =>
{
Thread.Sleep(3000);
return "Conteúdo";
});
Console.WriteLine("Criado: {0}\n", lazy.IsValueCreated);
Stopwatch sw = new Stopwatch();
sw.Start();
Console.WriteLine("Valor: {0}", lazy.Value);
sw.Stop();
Console.WriteLine("Tempo 1ª chamada: {0}\n", sw.Elapsed);
Console.WriteLine("Criado: {0}\n", lazy.IsValueCreated);
sw = new Stopwatch();
sw.Start();
Console.WriteLine("Valor: {0}", lazy.Value);
sw.Stop();
Console.WriteLine("Tempo 2ª chamada: {0}\n", sw.Elapsed);Nas linhas 1 a 5 estamos criando um Lazy<string>. Ok, isso não é um cenário real, mas estamos dizendo que para a criação deste tipo a Thread deverá dormir por 3 segundos. Estou utilizando o Lazy pois não quero que a Thread congele no momento da instanciação deste objeto, mas sim no momento da utilização do mesmo.O Lazy<T> possui 2 propriedades públicas: IsValueCreated que é um booleano indicando se o valor já foi inicializado ou não. E também Value, que retorna o valor armazenado.O restante do código é bem simples, na_ linha 7_ apenas verificamos se o valor já está criado, que deve ser falso. Na linha 11 fazemos a chamada para a propriedade Value, e isto fará com que a Thread congele por 3 segundos e nossa string seja de fato criada. Na linha 13 escrevo no console o tempo que demorou a invocação da propriedade Value, que deve ser de cerca de 3 segundos.Depois repito este processo para verificar o tempo gasto, que será muito menor do que 3 segundos, pois nosso valor já foi inicializado anteriormente.Confira abaixo a saída do programa:

</a>
É isso galera, fica aí mais uma dica e novidade do .net 4.
Abraços, Vinicius Quaiato.