Ontem eu precisei re-lembrar o conceito de threads. Um cliente me pediu para que o seu sistema enviasse um email, para um supervisor, quando algum pedido “especial” entrasse em seu sistema.
O problema foi a demora no envio de e-mail quando o pedido ia ser salvo.
Então eu resolvi colocar o processo de envio de e-mail em uma thread. Assim liberando o sistema para demais tarefas e interação com o usuário.
Vou exemplificar o que eu fiz: imagine um método para somar dois números que tem que ser rodado em uma thread. Eu fiz um método que recebe um object, que serão meus números a serem somados. Assim foi possivel disparar a thread usando o delegate ParameterizedThreadStart. Para passar os números eu passo um objeto anônimo. Acompanhe no código:
class Program
{
private static int resultado = 0;static void Main(string[] args)
{
var a = 2;
var b = 3;// -> Cria a Thread.
var processo = new Thread(SomarNumeros);
// -> Inicia a thread passando um objeto anonimo com os numeros para seu parametro.
processo.Start(new { a, b });Console.ReadKey();
}private static void SomarNumeros(object numeros)
{
// -> recupera os numeros via reflection.
var primeiroNumero = (int) numeros.GetType().GetProperty("a").GetValue(numeros, null);
var segundoNumero = (int)numeros.GetType().GetProperty("b").GetValue(numeros, null);
resultado = primeiroNumero + segundoNumero;
}
}
Uma última observação é que usando .NET 4 temos a possibilidade de usar dynamic para recuperar os valores animos, veja:
private static void SomarNumeros(dynamic numeros)
{
// -> soma os numeros via dynamic.
resultado = numeros.a + numeros.b;
}
Valews, até a próxima.
0 comentários:
Postar um comentário