Quando trabalhamos com threads podemos ter a nescessidade de abortar o processo durante a execução.
Para isso temos o metodo Abort() que é muito simples de se utilizar.
Porém, abortar uma Thread durante sua execução pode levar algum objeto de seu sistemaa um estado de inconsistencia.
Imagine o seguinte cenario:
Você tem as seguintes linhas para serem executadas dentro da sua Thread
MinhaClasse.NomePessoa = "JOAO";
MinhaClasse.Idade = "22";
MinhaClasse.Hobby = "Programação";
Se você lança um comando Abort(), durante a execução de qualquer uma dessas linhas, a thread vai pararimediatamente.
Imagine seu objeto agora ficando somente com o atributo nome.
Esse objeto não servirá para nada, pois os outros dados importantes não estão contidos nele.
Para evitar que uma chamada Abort(), termine a thread de maneira errada, podemos usar os metodos:
BeginCriticalRegion()
e
EndCriticalRegion()
voltando ao nosso exemplo, poderiamos fazer da seguinte forma:
Thread.BeginCriticalRegion();
MinhaClasse.NomePessoa = "JOAO";
MinhaClasse.Idade = "22";
MinhaClasse.Hobby = "Programação";
Thread.EndCriticalRegion();
Desta maneira, se nosso programa chamasse o metodo Abort() da nossa Thread, enquanto fosse processada alguma das linhas entre as chamadas de Thread.BeginCriticalRegion() e Thread.EndCriticalRegion()
A thread irá esperar a execução acabar para depois, mandar o sinal de termino a thread.
O objetivo é fazer com que todas as linhas na região critica sejam executadas de forma atomica, como se fossem apenas uma linha.
Espero que a dica seja proveitosa para alguem.
terça-feira, 19 de fevereiro de 2008
Dica C# - Critical Region - Thread
Postado por João Bosco Seixas às 00:03
Marcadores: .NET, C#, Desenvolvimento, Microsoft
Assinar:
Postar comentários (Atom)
0 comentários:
Postar um comentário