Trabalhando com classes Thread Safe (Wait on Lock) no C#
Fala galera, hoje resolvi trazer um post simples mas que pode ajudar muita gente.
Existem muitos cenários em que uma classe Thread Safe podem ser usadas, é muito comum vermos este cenários quando trabalhamos com muitas threads que manipulam um mesmo documento. Um exemplo claro é a gravação de logs.
Imagine uma aplicação onde abre várias threads e cada uma delas gravam alguma informação em um txt no disco, provavelmente você teria problemas, pois enquanto uma thread está escrevendo, outras outras querem escrever no mesmo tempo, com isso é levantada uma exception.
1 |
The process cannot access the file '{path}' because it is being used by another process |
Para resolver esse tipo de problema podemos usar uma classe muito conhecida chamada ReaderWriterLockSlim, com ela é possível avisar a thread anterior para aguardar o término do processamento, assim que a primeira thread soltar o arquivo a segunda thread entra em ação.
Veja um exemplo abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public class MinhaClasse{ private static ReaderWriterLockSlim _readWriteLock = new ReaderWriterLockSlim(); public void WriteToFileThreadSafe(string text, string path) { // Locando a classe para a thread que está sendo executada _readWriteLock.EnterWriteLock(); try { // Escrevendo no arquivo using (StreamWriter sw = File.AppendText(path)) { sw.WriteLine(text); sw.Close(); } } finally { // Thread corrente libera a classe para que outra thread possa trabalhar _readWriteLock.ExitWriteLock(); } } } |
Como podemos ver a classe ReaderWriterLockSlim nos facilita resolver este problema locando o processamento para thread corrente através do método EnterWriteLock() e liberando através do método ExitWriteLock().
Bom espero que tenham gostado da dica e até a próxima!
About author
You might also like
Aprenda ser mais produtivo com o Visual Studio
Share this on WhatsAppAprenda atalhos e macetes do Visual Studio Pessoal, resolvi compartilhar com vocês algumas formas de tornar nosso trabalho mais produtivo com o Visual Studio. Sabemos que o
15 ferramentas que todo desenvolvedor web deveria conhecer!
Share this on WhatsAppHoje venho compartilhar com vocês 15 ferramentas que aumentam e muito minha produtividade em meu dia a dia. São ferramentas online que podem acelerar bastante o nosso
Notepad.cc pode lhe ajudar em seu trabalho, veja como!
Share this on WhatsAppConheça agora o Notepad.cc, um bloco de notas online Notepad.cc é uma ferramenta extremamente simples, seu objetivo é levar o recurso de bloco de anotações em qualquer
1 Comment
dicas chutar concurso publico
junho 17, 11:03