Nello script #653 abbiamo parlato di come acquisire un lock per eseguire una porzione di codice in modalità esclusiva ed evitare che più thread la eseguano contemporaneamente. .NET 9 porta una novità da questo punto di vista introducendo un nuovo tipo: Lock. Grazie a questo oggetto, il codice per avere un lock esclusivo diventa estremamente semplice. Quello che dobbiamo fare è creare un'istanza di è Lock a livello di classe e poi invocarne il metodo EnterScope per acquisire il lock (o rimanere in attesa qualosa il lock sia acquisito da un altro thread). EnterScope restituisce un oggetto Scope che implementa l'interfaccia IDisposable e che nel metodo Dispose rilascia il lock.
public class MyClass { private readonly Lock _lockObj = new(); public void Method() { using (var scope = _lockObject.EnterScope()) { //Codice } } }
La potenza di questa classe sta nel fatto che unisce la semplicità dell'istruzione lock con la potenza di SemaphoreSlim. Dalla prima prende la capacità di rendere il nostro codice leggibile e corto rispetto grazie all'indentazione nel blocco using al posto del try/finally. Dalla seconda prende la possibilità di eseguire codice sia sincrono che asincrono.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.